재우니의 블로그

 

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')