이 글에서는 SQL Server에서 데이터 형식을 안전하게 변환할 수 있는 TRY_CAST 함수의 사용법을 구문과 매개변수 설명, 그리고 다양한 실전 예제를 통해 자세히 알아봅니다.
TRY_CAST 함수란?
SQL Server의 TRY_CAST 함수는 하나의 표현식(expression)을 다른 데이터 형식으로 변환하는 함수입니다. 기존의 CAST 함수와 역할은 비슷하지만, 가장 큰 차이점은 변환에 실패했을 때 오류를 발생시키지 않고 NULL을 반환한다는 점입니다. 반대로 변환이 성공하면 해당 변환된 값을 그대로 반환합니다.
이러한 특성 덕분에 데이터 품질이 일정하지 않은 컬럼을 처리하거나, 잘못된 값으로 인해 쿼리 전체가 중단되는 상황을 방지하고자 할 때 매우 유용합니다.
구문
SQL Server에서 TRY_CAST 함수를 사용하는 기본 구문은 다음과 같습니다.
TRY_CAST(bieuthuc AS kieudulieu [(do_dai)])
매개변수
- bieuthuc: 다른 데이터 형식으로 변환할 값입니다. 테이블의 특정 컬럼 이름이나 계산식도 가능합니다.
- kieudulieu: 표현식이 변환될 새로운 데이터 형식의 이름입니다. 다음 중 하나를 사용할 수 있습니다: bigint, int, smallint, tinyint, bit, decimal, numeric, money, smallmoney, float, real, datetime, smalldatetime, char, varchar, text, nchar, nvarchar, ntext, binary, varbinary, image
- do_dai (선택 사항): 결과 값의 데이터 길이를 지정합니다. char, varchar, nchar, nvarchar, binary, varbinary 형식에 적용됩니다.
주의 사항
- float 또는 numeric 데이터를 int 정수형으로 변환할 경우, TRY_CAST 함수는 소수점 이하 자릿수를 잘라냅니다(반올림하지 않음).
- 유사한 기능을 하는 CAST, CONVERT, TRY_CONVERT 함수도 함께 참고하면 좋습니다.
- TRY_CAST는 SQL Server 2012부터 도입되었으며, SQL Server 2014, 2016, 2017 등 이후 버전에서 모두 사용할 수 있습니다.
예제
다양한 상황에서 TRY_CAST 함수가 어떻게 동작하는지 예제를 통해 살펴보겠습니다.
1. 숫자를 int로 변환
SELECT TRY_CAST(14.85 AS int);
-- 결과: 14
-- 소수점 이하가 잘린 int 값이 반환됩니다.
2. 숫자를 float로 변환
SELECT TRY_CAST(14.85 AS float);
-- 결과: 14.85
-- float 값으로 반환되며 값이 잘리지 않습니다.
3. 변환이 불가능한 문자열
SELECT TRY_CAST('14 Main St.' AS float);
-- 결과: NULL
-- 문자열을 float로 변환할 수 없으므로 NULL이 반환됩니다.
-- (CAST 함수였다면 여기서 오류가 발생합니다.)
4. 숫자를 varchar로 변환
SELECT TRY_CAST(15.6 AS varchar);
-- 결과: '15.6'
-- varchar 문자열로 변환되어 반환됩니다.
5. 길이 제한으로 인한 변환 실패
SELECT TRY_CAST(15.6 AS varchar(2));
-- 결과: NULL
-- 값이 길이 2짜리 varchar에 들어가지 않아 변환에 실패하고 NULL이 반환됩니다.
6. 날짜 문자열을 datetime으로 변환
SELECT TRY_CAST('2018-09-13' AS datetime);
-- 결과: '2018-09-13 00:00:00.000'
-- datetime 형식으로 변환되어 반환됩니다.
이처럼 TRY_CAST 함수는 변환 실패 시 NULL을 반환하기 때문에, WHERE 절이나 CASE 문과 함께 활용하면 유효하지 않은 데이터를 걸러내는 로직을 손쉽게 구현할 수 있습니다. 데이터 클렌징 작업이나 ETL 프로세스에서 특히 유용하게 사용되니, CAST와의 차이점을 잘 기억해 두시기 바랍니다.