개발자의 끄적끄적

[DBMS] MSSQL 오전/오후를 24시간 표기법으로 변경 [펌] 본문

개발/sql

[DBMS] MSSQL 오전/오후를 24시간 표기법으로 변경 [펌]

효벨 2020. 8. 8. 02:00
728x90
반응형

[DBMS] MSSQL 오전/오후를 24시간 표기법으로 변경 [펌]

 

오래된 데이터들에 날짜형식이 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

 

출처 : https://phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=82575

반응형
Comments