오래된 데이터들에 날짜형식이 varchar 형태로 아래와 같이 들어있었다.
2008-01-01 오전 12:01:00
2008-01-01 오후 12:01:00
오전 12 시라니... 저거슨 낮12시인가 자정인가...
그냥 24시간제로 바꾸자!
소스에 대한 로직은 이렇다.
1. 오후면서 오후 12시가 아닌가? 그럼 12시간을 더해주자
: 오후 1시 ==> 13시
2. 오전 12시인가? 그렇다면 12를 빼주자
:오전 12시 00시
3. 해당 조건이 아니면 그냥 오전/오후만 빼주면 끝!
select UFN_ConvertDate('2020-01-01 오전 12:01:00') => 2020-01-01 00:01:00
select UFN_ConvertDate('2020-01-01 오전 1:01:00') => 2020-01-01 01:01:00
select UFN_ConvertDate('2020-01-01 오후 12:01:00') => 2020-01-01 12:01:00
select UFN_ConvertDate('2020-01-01 오후 1:01:00') => 2020-01-01 13:01:00
CREATE FUNCTION [dbo].[UFN_ConvertDate] (@date AS VARCHAR(50))
RETURNS datetime
AS
BEGIN
DECLARE @OutDate datetime
SET @OutDate = CASE WHEN CHARINDEX('오후',@date)>0 and CHARINDEX('오후 12',@date)<=0 THEN
DATEADD(HH,12,CONVERT (DATETIME, REPLACE(@date,'오후','')))
WHEN CHARINDEX('오전 12',@date)>0 THEN
DATEADD(HH,-12,CONVERT (DATETIME, REPLACE(@date,'오전','')))
ELSE CONVERT (DATETIME,REPLACE(REPLACE(@date,'오전',''),'오후','') )
END
RETURN @OutDate
END