✔ ISNULL() : 해당 컬럼 값이 NULL일 경우 지정한 값으로 대체
SELECT 직원이름, 성별, 퇴사일 FROM 직원;
SELECT 직원이름, 성별, ISNULL(퇴사일, '9999-12-31') 퇴사일 FROM 직원;

✔ COALESCE() : ISNULL()과 동일함 ( 쿼리 범용성을 위해서 ISNULL() 함수 대신 사용 가능)
SELECT 직원이름, 성별, COALESCE(퇴사일, '9999-12-31') 퇴사일 FROM 직원;

✔ CONCAT() : 문자열 연결
SELECT CONCAT('나는 ',20,'살 입니다.') AS 문장; /* 나는 20살 입니다. */
✔ CONCAT_WS() : 나열된 값을 구분자를 두어서 모두 결합한 하나의 문자열로 반화
SELECT CONCAT_WS(',','킬리','매즈','희순') ; /* 킬리,매즈,희순 */
✔ CONVERT() : 데이터 형식 변환
SELECT CONVERT(varchar(10), 1234567) + '원 입니다.';
✔ CAST() : 데이터 형식 변환
SELECT CAST(1234567 AS varchar(10)) + '원 입니다.';
✔ FORMAT() : 표시되는 형식을 임의 형태로 지정
SELECT 고객이름,
FORMAT(가입일, 'yyyy년MM월dd일') as 가입일,
/* #,# 으로 쓰면 0일 경우는 빈칸으로 출력됨.
#,0 으로 써주면 0 데이터 출력됨. */
FORMAT(포인트, '#,#') + '포인트 'AS 포인트1,
FORMAT(포인트, '#,0') + '포인트 'AS 포인트2
FROM 고객;

✔ TOP : 테이블 내 상위 하나의 행만 출력
SELECT TOP(1) * -- TTOP 1 로 써줘도 됨
FROM 고객
ORDER BY 가입일 DESC;
✔ TOP .. WITH TIES : 동일한 데이터가 있는 경우, 여러행 출력 가능
SELECT TOP 1 WITH TIES *
FROM 고객
ORDER BY 가입일 DESC;
📃 자세한 예시!
다음과 같은 데이터를 가진 테이블(T)이 있을 경우,

SELECT TOP 1 * -- 10 : 1건 출력
--SELECT TOP 1 WITH TIES T.* -- 10, 10 : 2건 출력
--SELECT TOP 2 WITH TIES T.* -- 10, 10: 2건 출력
--SELECT TOP 3 WITH TIES T.* -- 10, 10, 9, 9: 4건 출력
--SELECT TOP 4 WITH TIES T.* -- 10, 10, 9, 9: 4건 출력
FROM ( SELECT 10 AS VAL UNION ALL
SELECT 10 UNION ALL
SELECT 9 UNION ALL
SELECT 9 UNION ALL
SELECT 8 UNION ALL
SELECT 7 UNION ALL
SELECT 6 UNION ALL
SELECT 5 ) AS T
ORDER BY T.VAL DESC ;
✔ IIF() : 조건의 참/거짓에 따른 값 반환 (대다수의 경우 CASE문을 대체함)
SELECT IIF(10>20, '참','거짓'); -- 거짓
✔ CHOOSE() : 나열된 값 중에서 특정 번째 값 선택
SELECT CHOOSE(3,'나','너','우리','우리나라'); -- 우리
✔ STRING_AGG() : 문자열 집계 ( *** SQL SERVER 2017부터 가능)
SELECT STRING_AGG(고객이름,',') 성별_이름_집계
FROM 고객
WHERE 등급 = 'VIP'
AND 포인트 > 110000
AND 포인트 < 120000
GROUP BY 성별;

✔ STRING_SPLIT() : 구분자로 연결된 문자열을 테이블 형태로 변화 ( FROM 절에 옴)
DECLARE @STR VARCHAR(100) = 'D0001,D0002,D0034,D0814'; --직원코드
SELECT *
FROM string_split(@STR, ',' ) AS V
INNER JOIN 직원 AS E ON V.VALUE = E.직원코드;

✔ REPLICATE() : 특정 문자를 지정한 수만큼 반복
SELECT REPLICATE('*', 10); -- **********
✔ REPLACE()
SELECT 고객이름, 전자우편, REPLACE(전자우편,'gmeil.com','jmeil.com') AS 전자우편_NEW
FROM 고객;

✔ LEFT() / RIGHT() : 왼쪽 / 오른쪽에서 지정한 길이의 문자열 추출
SELECT 고객이름, 전화번호, LEFT(전화번호,3) as 통신사
FROM 고객;
/* 고객이름 전화번호 통신사
김아기 010-9603-8126 010 */
SELECT 고객이름, 전화번호, RIGHT(전화번호,4) as 끝네자리
FROM 고객;
/* 고객이름 전화번호 끝네자리
김아기 010-9603-8126 8126 */
✔ SUBSTRING() : 지정한 위치부터 지정한 길이의 문자열 추출
✔ CHARINDEX() : 특정 문자 또는 문자열의 위치 확인
SELECT 고객이름, 전화번호, SUBSTRING(전화번호, 1,3) AS 통신사
FROM 고객;
/* 고객이름 전화번호 통신사
김아기 010-9603-8126 010 */
SELECT 고객이름, 전자우편,
CHARINDEX('@',전자우편) AS 위치,
SUBSTRING(전자우편, CHARINDEX('@',전자우편)+1, 100) AS 도메인주소
FROM 고객;
/* 고객이름 전자우편 위치 도메인주소
김아기 agi.kim@gmeil.com 8 gmeil.com */
/* 도메인별 고객 수 */
SELECT SUBSTRING(전자우편, CHARINDEX('@',전자우편)+1, 100) AS 도메인주소,
COUNT(1) AS CNT
FROM 고객
GROUP BY SUBSTRING(전자우편, CHARINDEX('@',전자우편)+1, 100)
ORDER BY CNT DESC;
/* 도메인주소 CNT
dbnuri.com 52
daun.net 51
naber.com 51
hotmeil.com 50
gmeil.com 47
hanmeil.com 38 */
✔ UPPER() / LOWER() : 대소문자 변환
✔ Ctrl + Shift + U / L
DECLARE @str varchar(50) = 'Mads Mikkelsen';
SELECT UPPER(@str); -- MADS MIKKELSEN
SELECT LOWER(@str); -- mads mikkelsen
✔ SPACE() : 지정한 수만큼 공백(SPACE) 생김
SELECT 'ABC'+SPACE(10) +'DEF'; -- ABC DEF
✔ LTRIM() / RTRIM() / TRIM() : 공백제거
DECLARE @str char(20) = ' Mads ';
SELECT '['+LTRIM(@str)+']'; -- [Mads ]
SELECT '['+RTRIM(@str)+']'; -- [ Mads]
SELECT '['+TRIM(@str)+']'; -- [Mads]
✔ LEN() : 문자열에 포함된 문자 개수
/* 문자열에 포함된 'a' 개수 확인 */
DECLARE @str varchar(100) = 'Mads Mikkelsen';
SELECT @str 문자,
LEN(@str) 문자길이,
LEN(@str) - LEN(REPLACE(@str,'a','')) a개수 ;
/*
문자 문자길이 a개수
Mads Mikkelsen 14 1
*/
✔ DATALENGTH() : 문자열의 바이트(byte) 확인
✔ 숫자, 영문자 1byte, 한글 2byte
DECLARE @str varchar(100) = 'Mads Mikkelsen 매즈 미켈슨';
SELECT @str 문자,
DATALENGTH(@str) 바이트 ; -- 26 ( 한글 (2*5) + 영문 (1*13) + 공백 (1*3) )
✔ REVERSE() : 문자열 또는 숫자를 뒤집은 결과 반환
SELECT 고객코드, 고객이름, 포인트 ,
REVERSE(고객이름) 이름거꾸로,
REVERSE(포인트) 포인트거꾸로
FROM 고객;
/*
고객코드 고객이름 포인트 이름거꾸로 포인트거꾸로
agikim 김아기 71500 기아김 00517
agoh 오암기 10800 기암오 00801
*/
'MSSQL' 카테고리의 다른 글
[MSSQL] 테이블 / 컬럼 / Comment 조회 (0) | 2022.12.26 |
---|---|
[MSSQL]유용한 함수들(번호, 순위) (0) | 2022.12.26 |
[MSSQL]유용한 함수들(날짜/시간 관련) (0) | 2022.12.26 |
[MSSQL]유용한 함수들(데이터베이스 관련) (0) | 2022.12.23 |
SET STATISTICS IO ON / OFF(페이지 IO 보는 법) (0) | 2022.12.23 |