MSSQL에서 데이터 타입을 변경해 주는 내장 함수 CONVERT와 CAST에 대해 소개합니다.
CONVERT
문법
CONVERT([데이터 타입], [데이터], [스타일])
/*
[데이터 타입]: 변경할 데이터타입
[데이터]: 데이터타입을 변경할 데이터
[스타일]: 데이터를 변환하며 출력할 스타일 옵션설정
[데이터]가 날짜인경우 변환하며 지정할 날짜포맷 옵션설정
--> [데이터]를 [데이터 타입]으로 변경합니다.
*/
예시
SELECT CONVERT(INT, 123.1223)
/*
FLOAT타입의 데이터를 INT로 변경
--> 123 출력됩니다.
*/
SELECT CONVERT(DECIMAL(5,2), 123.1263)
/*
FLOAT 타입의 데이터를 DECIMAL(5,2) 타입으로 변경합니다.
--> 123.13 출력됩니다. (반올림됨)
*/
💡숫자를 정수로 변경할 때는 값을 자르고 정수 외 실수는 반올림하여 출력합니다.
SELECT CONVERT(VARCHAR(8), GETDATE(), 112)
/*
현재날짜를 YYYYMMDD 형태 문자열로 출력합니다.
--> '20221001' 출력됩니다.
*/
💡문자열 데이터 타입의 경우 길이를 지정하지 않은 경우 자동 30으로 지정됩니다.
날짜 변환 옵션 표
CONVERT(VARCHAR, GETDATE(), 1) | MM/DD/YY | 10/01/22 |
CONVERT(VARCHAR, GETDATE(), 2) | YY.MM.DD | 22.10.01 |
CONVERT(VARCHAR, GETDATE(), 3) | DD/MM/YY | 01/10/22 |
CONVERT(VARCHAR, GETDATE(), 4) | DD.MM.YY | 01.10.22 |
CONVERT(VARCHAR, GETDATE(), 5) | DD-MM-YY | 01-10-22 |
CONVERT(VARCHAR, GETDATE(), 8) | HH:MM:SS | 22:39:44 |
CONVERT(VARCHAR, GETDATE(), 9) | MM DD YYYY HH:MM:SS:MS A/PM | 10 1 2022 10:40:02:233PM |
CONVERT(VARCHAR, GETDATE(), 13) | DD MM YYYY HH:MM:SS:MS | 01 10 2022 22:41:05:413 |
CONVERT(VARCHAR, GETDATE(), 14) | HH:MM:SS:MS | 22:41:22:090 |
CONVERT(VARCHAR, GETDATE(), 20) | YYYY-MM-DD HH:MM:SS | 2022-10-01 22:41:31 |
CONVERT(VARCHAR, GETDATE(), 21) | YYYY-MM-DD HH:MM:SS.MS | 2022-10-01 22:41:41.867 |
CONVERT(VARCHAR, GETDATE(), 22) | MM/DD/YY HH:MM:SS A/PM | 10/01/22 10:41:57 PM |
CONVERT(VARCHAR, GETDATE(), 23) | YYYY-MM-DD | 2022-10-01 |
CONVERT(VARCHAR, GETDATE(), 25) | YYYY-MM-DD HH:MM:SS.MS | 2022-10-01 22:42:29.140 |
CONVERT(VARCHAR, GETDATE(), 101) | MM/DD/YYYY | 10/01/2022 |
CONVERT(VARCHAR, GETDATE(), 102) | YYYY.MM.DD | 2022.10.01 |
CONVERT(VARCHAR, GETDATE(), 103) | DD/MM/YYYY | 01/10/2022 |
CONVERT(VARCHAR, GETDATE(), 104) | DD.MM.YYYY | 01.10.2022 |
CONVERT(VARCHAR, GETDATE(), 105) | DD-MM-YYYY | 01-10-2022 |
CONVERT(VARCHAR, GETDATE(), 111) | YYYY/MM/DD | 2022/10/01 |
CONVERT(VARCHAR, GETDATE(), 112) | YYYYMMDD | 20221001 |
CONVERT(VARCHAR, GETDATE(), 120) | YYYY-MM-DD HH:MM:SS | 2022-10-01 22:43:54 |
CONVERT(VARCHAR, GETDATE(), 121) | 2022-10-01 22:44:04.287 |
CAST
CAST는 CONVERT와 거의 동일하고 다만 스타일 옵션이 따로 없습니다.
문법
CAST([데이터] AS [데이터 타입])
/*
[데이터]: 데이터타입을 변경할 데이터
[데이터 타입]: 변경할 데이터타입
--> [데이터]를 [데이터 타입]으로 변경합니다.
*/
예시
SELECT CAST(123.1223 AS INT)
/*
FLOAT타입의 데이터를 INT로 변경
--> 123 출력됩니다.
*/
SELECT CAST(123.1263 AS DECIMAL(5,2))
/*
FLOAT 타입의 데이터를 DECIMAL(5,2) 타입으로 변경합니다.
--> 123.13 출력됩니다. (반올림됨)
*/
무엇을 쓸까?
일부 데이터 타입 변환에서는 CAST기능이 더 빠르고 좋은 성능을 제공하며
CONVERT가 더 좋은 반대의 경우도 있습니다. (날짜, 시간, 분수 및 통화기호)
기본적으로는 CAST를 쓰고 날짜나 시간 등은 CONVERT로 사용하면 좋을 것 같습니다.