이 글에서는 SQL Server의 데이터 형식 변환 함수인 TRY_CONVERT의 기본 문법과 다양한 예제를 통해 함수를 쉽게 이해하고 실무에 바로 적용할 수 있는 방법을 자세히 소개합니다.
TRY_CONVERT 함수란?
TRY_CONVERT 함수는 SQL Server에서 표현식(expression)을 원하는 데이터 형식으로 변환할 수 있게 해주는 함수입니다. 특히 날짜(date) 데이터처럼 특정 형식(style)을 지정해야 하는 경우에 유용합니다. 변환에 성공하면 해당 값을 반환하지만, 변환에 실패하면 오류 대신 NULL을 반환한다는 점이 일반적인 CONVERT 함수와의 가장 큰 차이점입니다. 덕분에 데이터 품질이 불확실한 환경에서도 쿼리가 중단되지 않고 안전하게 형식 변환을 처리할 수 있습니다.
기본 문법
SQL Server에서 TRY_CONVERT 함수를 사용하는 기본 문법은 다음과 같습니다.
TRY_CONVERT(data_type(length), expression, style)
매개변수 설명:
- data_type: 표현식을 변환할 대상 데이터 형식의 이름입니다. bigint, int, smallint, tinyint, bit, decimal, numeric, money, smallmoney, float, real, datetime, smalldatetime, char, varchar, text, nchar, nvarchar, ntext, binary, varbinary, image 중 하나를 사용할 수 있습니다.
- length (선택 사항): char, varchar, nchar, nvarchar, binary, varbinary 형식으로 변환할 때 결과 값의 길이를 지정합니다.
- expression: 다른 데이터 형식으로 변환할 값입니다. 테이블의 열 이름이나 계산식도 사용할 수 있습니다.
- style (선택 사항): 날짜 형식의 데이터를 문자열로 변환할 때 출력 형식을 결정하는 숫자 코드입니다. 아래 표는 TRY_CONVERT에서 자주 사용되는 주요 형식 코드입니다.
날짜·시간 형식 코드(style)표
| yy 형식 | yyyy 형식 | 출력 형태 |
|---|---|---|
| 0 | 100 | mon dd yyyy hh:miAM/PM (기본값) |
| 1 | 101 | mm/dd/yyyy (미국 표준) |
| 2 | 102 | yy.mm.dd (ANSI 표준) |
| 3 | 103 | dd/mm/yy (영국/프랑스 표준) |
| 4 | 104 | dd.mm.yy (독일 표준) |
| 5 | 105 | dd-mm-yy (이탈리아 표준) |
| - | 106 | dd mon yy |
| - | 107 | Mon dd, yy |
| 8 | 108 | hh:mi:ss |
| 9 | 109 | mon dd yyyy hh:mi:ss:mmmAM/PM |
| 10 | 110 | mm-dd-yy (미국 표준) |
| 11 | 111 | yy/mm/dd (일본 표준) |
| 12 | 112 | yymmdd (ISO 표준) |
| 13 | 113 | dd mon yyyy hh:mi:ss:mmm (유럽 표준 - 24시간제) |
| 14 | 114 | hh:mi:ss:mmm (24시간제) |
| 20 | 120 | yyyy-mm-dd hh:mi:ss (ODBC canonical - 24시간제) |
| 21 | 121 | yyyy-mm-dd hh:mi:ss:mmm (ODBC canonical - 24시간제) |
| - | 126 | yyyy-mm-ddThh:mi:ss.mmm (ISO8601 표준) |
| - | 127 | yyyy-mm-ddThh:mi:ss.mmmZ (ISO8601 표준) |
| - | 130 | dd mon yyyy hh:mi:ss:mmmAM/PM (Hijri 표준) |
| - | 131 | dd/mm/yy hh:mi:ss:mmmAM/PM (Hijri 표준) |
참고 사항
- float 또는 numeric 데이터 형식을 int(정수)로 변환할 때 TRY_CONVERT는 소수점 이하 자릿수를 잘라냅니다(반올림 아님).
- CAST, CONVERT, TRY_CAST 함수도 함께 비교해 보면 각 함수의 차이를 더 명확히 이해할 수 있습니다.
- TRY_CONVERT는 SQL Server 2012에서 처음 도입되었으며, SQL Server 2014, 2016, 2017 등 이후 버전에서 모두 사용할 수 있습니다.
실전 예제
다음 예제들을 통해 TRY_CONVERT 함수가 다양한 상황에서 어떻게 동작하는지 확인해 보겠습니다.
SELECT TRY_CONVERT(int, 14.85);
-- 결과: 14
-- (소수점 이하가 잘린 int 값 반환)
SELECT TRY_CONVERT(float, 14.85);
-- 결과: 14.85
-- (float 값 그대로 반환, 잘림 없음)
SELECT TRY_CONVERT(float, '14 Main St.');
-- 결과: NULL
-- (문자열을 float로 변환할 수 없어 NULL 반환)
SELECT TRY_CONVERT(varchar, 15.6);
-- 결과: '15.6'
-- (varchar 형식으로 변환되어 반환)
SELECT TRY_CONVERT(varchar(2), 15.6);
-- 결과: NULL
-- (길이 2자리 varchar에 값이 맞지 않아 변환 실패)
SELECT TRY_CONVERT(datetime, '2018-09-13');
-- 결과: '2018-09-13 00:00:00.000'
-- (datetime 형식으로 변환되어 반환)
SELECT TRY_CONVERT(varchar, '2018-09-13', 101);
-- 결과: '09/13/2018'
-- (형식 코드 101 = mm/dd/yyyy, 미국 표준 적용)
위 예제에서 볼 수 있듯이, TRY_CONVERT는 변환이 불가능한 경우 오류를 발생시키지 않고 NULL을 조용히 반환합니다. 따라서 배치 작업이나 대량 데이터 마이그레이션처럼 잘못된 값 하나 때문에 전체 작업이 실패해서는 안 되는 상황에서 특히 유용하게 활용할 수 있습니다.