NOW()도 만들어진 날짜 문자열을 DATETIME 형식으로 변환하기 ASP(Classic)

(Classic ASP, 즉 VBScript 이야기다.)

모든 날짜 문자열을 VARCHAR(30) 형의 컬럼 RegDate에 저장하는 어떤 DB가 있다. 문자열은 vbscript의 now() 함수에서 생성하는 "2008-10-18 오후 12:06:38" 형태인데, 무언가를 조회하려면 substring을 이용해서 문자열 일부분을 가공하거나 datetime으로 변환하는 방법을 써야 했다.

인터넷에서 찾은 메서드가 다음과 같은데

SELECT @RETURNVALUE=CASE WHEN  CHARINDEX('오후',@sdate)>0
THEN DATEADD(HH,12,CONVERT (DATETIME, REPLACE(@sdate,'오후','')))
ELSE CONVERT (DATETIME,REPLACE(@sdate,'오전','') )

이 경우 "2008-10-18 오후 12:06:38"같은 날자를 잘못 이해하는 문제가 있다. NOW() 함수가 만드는 '오후 12시 06분'이란 일반적으로 말하는 24시 30분이 아니라 오전 12시 06분을 이야기하는 것이기 때문이다. 결국 다른 방법을 이용해서 데이터를 변환하기로 했다.

1. DateTime 형식의 컬럼을 추가 (RegDate2)
2. 삽입

UPDATE tbl_test
SET RegDate2 = Substring(RegDate, 1, 10) + Substring(RegDate, 14, 9) + ' ' +
CASE Substring(RegDate, 12, 2) WHEN '오전' THEN 'AM' ELSE 'PM' END

그러나 이 경우에도 예외는 존재한다. now() 혹은 date() 함수를 쓸 경우 정각의 경우에는 "2009-05-06 오전 12:00:00"이 다 기록되지 않고 그냥 "2009-05-06"만 표시가 된다. 결국 위의 함수는 실패하게 된다.
방법은 시간에 쓰이는 문자열인 ":"가 없는 경우를 찾아 "오전 00:00:00" 으로 변환하는 것이다.

UPDATE tbl_test
SET RegDate = RegDate + ' 오전 12:00:00'
WHERE RegDate NOT LIKE '%:%'

코드 출처 :
http://www.sqlworld.pe.kr/mboard/mboard/mboard.asp?board_id=tip&group_name=board&idx_num=17&page=1&category=&search=&b_cat=0&order_c=idx_num&order_da=asc : 문자열 데이터를 날짜형 데이터로 변환하기
http://iamgsi.com/472 : 문자열을 datetime로 변경해 주는 함수


Tag :
, ,

Leave Comments