MSSQL 데이터타입 변환하기 CONVERT / CAST

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로 사용하면 좋을 것 같습니다.