2009/07/31 11:49
사용자 삽입 이미지

  ASP에서 현재 날짜를 DB의 datetime 타입 컬럼에 넣으려다보니 에러가 발생한다. 웹에서는 원인을 알 수 없으니 서버에 들어가서 쿼리분석기를 돌려보았다.  " 문자열을 datetime으로 변환하는 중 구문 오류가 발생했습니다." 란다. 아무래도 내가 집어넣으려는 값과 값을 담을 그릇이 서로 다른 데이터 형태를 가지고 있는가보다. 그래서 꾸물꾸물 값을 찍어보니...

       ASP에서 now()를 사용하면 나오는 값은 이거 --> 2009-07-31 오후 1:26:25
       DB에서 datetime 타입안에 들어가는 값은 이거 --> 2009-07-31 13:26:25.270


now()에서는 오전/오후라는 한글이 들어가는 점이 다른 것 같다. 그래서 이걸 string으로 만들어야 하나 고민을 하던 차에 인터넷에서 좋은 게 있어서 써봤다.

CREATE FUNCTION dbo.fn_Changedatetime ( @sdate varchar(30) )RETURNS DATETIME AS BEGIN DECLARE @RETURNVALUE DATETIME BEGIN SELECT @RETURNVALUE=CASE WHEN CHARINDEX('오후',@sdate)>0 THEN DATEADD(HH,12,CONVERT (DATETIME, REPLACE(@sdate,'오후',''))) ELSE CONVERT (DATETIME,REPLACE(@sdate,'오전','') ) END END RETURN(@RETURNVALUE) END

   Function. 즉 함수다. 학교를 다닐 때 분명 DB 수업을 들었는데(심지어 학점도 잘 나왔어!) 그런데 이렇게 함수 기능이 있는지도 몰랐다.

   내부적으로는 오후일 경우 시간에 12를 플러스 시켜주어 24시간 타입으로 바꾸고, 또 오전과 오후라는 문자열을 공백으로 치환시키는 것 같다.  하지만 사실 그런거 몰라도 주욱 드래그해서 긁어다가 쓰고 쿼리문 내에서 dbo.fn_Changedatetime를 호출만 하면 된다. 이렇게.  

       SQL = "INSERT TABLE_NAME  VALUES (dbo.fn_Changedatetime('"&now()&"'))"

아- 편하네.
 
Posted by 보댕