개요
MSSQL Convert 함수는 DataType 을 변환하는 함수인데, 112 등의 인수를 이용해서 날짜 등을 특정한 형태로 변환하는데도 많이 사용됩니다. 날짜형식변환이 아닌 순수한 DataType 변환은 CAST 가 몇 글자 짧아서 CAST 를 보통 많이 사용합니다.
Convert 구문
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
날짜 변환 예제 ( datetime to string )
SELECT CONVERT(CHAR(8), GETDATE(), 112) AS [112]
, CONVERT(CHAR(10), GETDATE(), 120) AS [120]
, CONVERT(CHAR(10), '20231231', 112) AS [StringToString]
예제 실행 결과

날짜변환 예제 ( datetime 이 아닌 경우 )
SELECT CONVERT(CHAR(10), '2023-12-31', 112) AS [String To String]
, CONVERT(CHAR(10), CAST('2023-12-31' AS DATETIME), 112) AS [String To String]
, CONVERT(datetime, '20231231') as [String To Datetime]

이 경우 첫번째 CASE 는 형식 변환이 안됩니다. 두 번째 인수가 DATETIME 이 아니라서, 원본 문자열이 그대로 다시 표시됩니다. 그래서 두 번째 CASE 처럼 CAST 를 이용해서 날짜형식으로 바꿔줘야 세번째 인수가 적용된 결과가 표시됩니다. 세번째 예제는 string 을 Datetime 으로 변환하는 예제입니다. 이 경우는 세 번째 인수가 필요없습니다.
기타
형변환을 할 때에는 먼저 isnumeric 또는 isdate 함수를 통해서 변환이 가능한 값인지를 확인하는 것이 좋습니다. 당초에 변환이 불가능한 값이면 convert 에서 에러가 나기때문에, case 문 등을 활용해서 확인후에 변환하도록 합니다.
아니면 TRY_CAST, TRY_CONVERT 를 사용하는 것도 좋습니다.이 함수들은 CAST 나 CONVERT 실패시 NULL 을 반환하기때문에 에러는 나지 않습니다.
참고 – Convert 함수 세 번째 인수 목록
두 자리 연도(yy)1 | 네 자리 연도(yyyy) | Standard | 입출력3 |
---|---|---|---|
– | 0 또는 1001,2 | datetime 및 smalldatetime의 기본값 | mon dd yyyy hh:miAM (또는 PM ) |
1 | 101 | 미국 | 1 = mm/dd/yy 101 = mm/dd/yyyy |
2 | 102 | ANSI | 2 = yy.mm.dd 102 = yyyy.mm.dd |
3 | 103 | 영국/프랑스 | 3 = dd/mm/yy 103 = dd/mm/yyyy |
4 | 104 | 독일어 | 4 = dd.mm.yy 104 = dd.mm.yyyy |
5 | 105 | 이탈리아어 | 5 = dd-mm-yy 105 = dd-mm-yyyy |
6 | 1061 | – | 6 = dd mon yy 106 = dd mon yyyy |
7 | 1071 | – | 7 = Mon dd, yy 107 = Mon dd, yyyy |
8 또는 24 | 108 | – | hh:mi:ss |
– | 9 또는 1091,2 | 기본값 + 밀리초 | mon dd yyyy hh:mi:ss:mmmAM (또는 PM ) |
10 | 110 | USA | 10 = mm-dd-yy 110 = mm-dd-yyyy |
11 | 111 | 일본 | 11 = yy/mm/dd 111 = yyyy/mm/dd |
12 | 112 | ISO | 12 = yymmdd 112 = yyyymmdd |
– | 13 또는 1131,2 | 유럽 기본값 + 밀리초 | dd mon yyyy hh:mi:ss:mmm (24시간) |
14 | 114 | – | hh:mi:ss:mmm (24시간) |
– | 20 또는 1202 | ODBC 표준 | yyyy-mm-dd hh:mi:ss (24시간) |
– | 21 또는 25 또는 1212 | time, date, datetime2, datetimeoffset의 ODBC 표준(밀리초 포함) 기본값 | yyyy-mm-dd hh:mi:ss.mmm (24시간) |
22 | – | 미국 | mm/dd/yy hh:mi:ss AM (또는 PM ) |
– | 23 | ISO8601 | yyyy-mm-dd |
– | 1264 | ISO8601 | yyyy-mm-ddThh:mi:ss.mmm (공백 없음)6 |
– | 1278, 9 | ISO8601(Z 표준 시간대) | yyyy-MM-ddThh:mm:ss.fffZ (공백 없음)6 |
– | 1301,2 | Hijri 5 | dd mon yyyy hh:mi:ss:mmmAM 7 |
– | 1312 | Hijri 5 | dd/mm/yyyy hh:mi:ss:mmmAM |