안녕하세요 time 타입 쿼리 문의 드립니다.
테이블에 유효 시작시간과 종료시간 컬럼이 있습니다.
sTime varchar(5)
eTime varchar(5)
조건절에서 현재 시간이 저 위의 컬럼시간에 유효한지 체크 하려고 하는데요
WHERE CONVERT(time(0), GETDATE()) >= CONVERT(time(0), sTime)
AND CONVERT(time(0), GETDATE()) <= CONVERT(time(0), eTime)
이런식으로 그런데 문제는
시작시간이 04:00 종료시간이 20:00 이렇게 되어있으면 상관이 없습니다만
시작시간이 20:00 종료시간이 04:00 이렇게 되어 있을땐 나오질 않아서요
유효한 시간이 날짜와 상관없이 20시 에서 새벽 4시 사이에 데이터를 가져오려 하는데
어떤 방법으로 처리 해야 할까요
도움 부탁드립니다.
감사합니다.
Comment 1
-
이스트럭(강동운)
2014.04.22 17:12
안녕하세요~!
VARCHAR로 된 시간 컬럼을.. 날짜로 가공해서 사용하는 방법입니다.
감사합니다 ^^
중요한 부분!
CASE DATEDIFF(HH, CONVERT(TIME(0), sTime), CONVERT(TIME(0), eTime)) < 0
THEN CONVERT(VARCHAR(10),GETDATE()+1,121) + ' ' + eTime
ELSE CONVERT(VARCHAR(10),GETDATE(),121) + ' ' + eTime
END
예제쿼리
WITH TBL AS
(
SELECT CONVERT(VARCHAR(5),'04:00') AS sTime, CONVERT(VARCHAR(5),'20:00') AS eTime
UNION ALL SELECT CONVERT(VARCHAR(5),'20:00') AS sTime, CONVERT(VARCHAR(5),'04:00') AS eTime
UNION ALL SELECT CONVERT(VARCHAR(5),'15:00') AS sTime, CONVERT(VARCHAR(5),'04:00') AS eTime
UNION ALL SELECT CONVERT(VARCHAR(5),'15:00') AS sTime, CONVERT(VARCHAR(5),'20:00') AS eTime
)
SELECT
*
FROM
(
SELECT
CONVERT(DATETIME,CONVERT(VARCHAR(10),GETDATE(),121) + ' ' + sTime) AS sDateTime
, CONVERT(DATETIME,CASE WHEN DATEDIFF(HH, CONVERT(TIME(0), sTime), CONVERT(TIME(0), eTime)) < 0
THEN CONVERT(VARCHAR(10),GETDATE()+1,121) + ' ' + eTime
ELSE CONVERT(VARCHAR(10),GETDATE(),121) + ' ' + eTime
END) AS eDatetime
FROM TBL
) DAT
WHERE GETDATE() BETWEEN sDateTime AND eDateTime