데이터베이스/MS-SQL 😃
ms-sql : yyyymmdd 문자형 날짜를 yyyy-MM-dd 날짜형식으로 변환하기( FUNCTION, TRY_CAST, FORMAT 사용)
재우니
2023. 5. 9. 00:54
ms-sql 구문입니다. yyyymmdd 형식으로 저장된 날짜형식을 yyyy-mm-dd 의 format 에 맞게 사용하고자 합니다. 이를 함수로 만들어서 사용할 예정입니다.
함수에서는 먼저 TRY_CAST 함수를 사용하여 입력값을 DATE형으로 변환한 뒤, FORMAT 함수를 사용하여 'yyyy-MM-dd' 형식으로 출력합니다. 이후, TRY_CONVERT 함수를 사용하여 변환된 값이 120 포맷(YYYY-MM-DD)에 맞는지 확인하고, 맞지 않을 경우 NULL 값을 반환하며, 통일하기 위해 NULL 체크 한 후 '' 빈값으로 변환하여 반환하였습니다.
ALTER FUNCTION [dbo].[ufn_convert_to_yyyymmdd](@date_string VARCHAR(8))
RETURNS VARCHAR(10)
AS
BEGIN
DECLARE @result VARCHAR(10)
IF @date_string IS NULL OR @date_string = '' OR LEN(@date_string) != 8
SET @result = ''
ELSE
--SET @result = CONVERT(VARCHAR(10), CONVERT(DATE, @date_string), 23)
SET @result = TRY_CONVERT(VARCHAR(10), FORMAT(TRY_CAST(@date_string AS DATE), 'yyyy-MM-dd'), 120)
IF(@result IS NULL) SET @result = ''
RETURN @result
END
실행해서 오류가 발생되면 '' 빈 값으로 반환하며, 날짜형식이 맞으면 하이픈 (-) 으로 구분하여 제공합니다. 입력된 숫자는 총 8자리로 구성하며, 미만 또는 초과가 되면 '' 빈값으로 반환합니다.
SELECT '20220101 : ' + [dbo].[ufn_convert_to_yyyymmdd] ('20220101')
SELECT '20230131 : ' + [dbo].[ufn_convert_to_yyyymmdd] ('20230131')
SELECT '20230231 : ' + [dbo].[ufn_convert_to_yyyymmdd] ('20230231')
SELECT '2023231 : ' + [dbo].[ufn_convert_to_yyyymmdd] ('2023231')