안녕하세요. 다름이 아니라 DATETIME type으로
구성된 테이블에 WHERE 조건을 시간은 FIX되고
날짜만 전일/다음날 로 셋팅 하려고 합니다.
그래서 아래와 같이 쿼리를 프로시저 WHERE 조건 구성 하였습니다.
DECLARE @v_dtFromTime DATETIME = CONVERT(CHAR,DATEADD(DD,-1,GETDATE()),23) + '03:00:00'
@v_dtFromTime 을 SELECT 해보면 정상적으로 출력되는데 프로시저 내에서 실행해보면 아래와 같이 오류가 발생하네요.
문자열을 날짜 및/또는 시간으로 변환하지 못했습니다. / 241
이 오류를 수정하려면 시간을 다른 방법으로 표기 해야 할거 같은데 마땅한 방법이 떠오르지지 않아서요 문의 드립니다.
Comment 3
-
처리짱
2015.10.05 11:49
-
나는짱이야
2015.10.05 13:19
isdate함수로 이미 질문 드리기 전에 확인해봤지만 1로 유효한 날짜라고 리턴하고 있습니다.
현재 찾은 해결책은 이렇습니다.
DATEADD(HH, 03, DATEADD(DD, DATEDIFF(DD, -1, GETDATE()), 0))
이런식으로 표현하면 제가 원하는 결과가 나오긴 하는데 DATEDIFF function에서 두번째 파라메터에 -1또는 0을 사용해도 무방한지가 또다른 고민이네요..ㅠㅠ
-
피오니
2015.10.06 14:39
CAST 를 사용해서 명시적으로 datetime 으로 타입을 변경해주심되겠네요..DECLARE @v_dtFromTime varchar(100), @d_dtFromTime datetimeSET @v_dtFromTime = CONVERT(char,DATEADD(DD,-1,GETDATE()),23) + '03:00:00'SET @d_dtFromTime = CAST(@v_dtFromTime AS datetime)SELECT @v_dtFromTime, @d_dtFromTime파라메터 인자값은 원하는 용도에 맞춰서 +, - 관계없이 사용해도 됩니다..DECLARE @dToday datetime, @nHH intSET @dToday = CAST(CONVERT(varchar(10), getdate(), 121) AS datetime)SET @nHH = 3SELECT DATEADD(hh, @nHH, @dToday - 1) AS yesterday,DATEADD(hh, @nHH, @dToday) AS today
WHERE 절에 들어가는 컬럼을 ISDATE 함수를 이용해서 DATETIME형식이 맞는지를 확인해야 할거 같습니다.