2011-01-17 4 views
9

이것이 작동하는 방식으로 불가능할 수도 있지만, 여기에 있습니다. 데이터베이스에MySQL : BETWEEN 시간을 비교하십시오.

SELECT * FROM `table` WHERE CAST('05:00:00' AS time) BETWEEN `start` AND `end` 

의 항목은 다음과 같습니다

`start` = '22:59:59' 
`end` = '06:00:00' 

그러나 쿼리가 어떤 결과를 반환하지 않습니다. 물론, 관련 날짜가있는 경우이 방법이 유용 할 수 있습니다. 시작이 '00 : 00 : 00 '인 경우에도 작동합니다.

+1

날짜가 아닌 시간이 중요합니까? '00 : 00 : 00 '과'06 : 00 : 00 '또는 '22 : 59 : 59'와 '23 : 59 : 59 '사이의 두 부분으로 나누십시오. –

+0

... 또는 논리를 반전하고 '06 : 00 : 00 '과 '22 : 59 : 59'사이에 오지 마시겠습니까? –

+0

분명히 그것을 할 수있는 방법 중 하나라고 생각하지 않았습니다. 논리는 응용 프로그램의 맥락에서 의미가 없습니다. 제안을 주셔서 감사합니다, 유일한 옵션 일 수 있습니다. – jmyz

답변

17

은 내가 당신을 위해 무엇을 찾고있는 것은 생각 :

SELECT * FROM table WHERE start < CAST('05:00:00' AS time) AND end > CAST('05:00:00' AS time) 

나는이 또한 작동해야하지만 당신의 CAST의를 사용할 필요가 있는지 확실하지 않습니다.

SELECT * FROM table WHERE start < '05:00:00' AND end > '05:00:00' 
+0

여기서 기억해야 할 중요한 점은 시간을 24 시간 형식으로 지정하면 쿼리에서 일치해야하기 때문에 위의 내용이 "SELECT * FROM table WHERE start ​​CAST ('17시 00 분 00 초'AS 시간) ' " – Chiwda

13
SELECT * 
FROM `table` 
WHERE CAST('05:00:00' AS time) BETWEEN `start` AND `end` 
     OR (NOT CAST('05:00:00' AS time) BETWEEN `end` AND `start` AND `start` > `end`) 
+0

winrar가 너 –

+1

너는 유머 감각이있다! 현재의 답변 대신 마커 여야합니다! –

4

난 그냥이 질문을 가로 질러 와서 나도 같은 문제가 있었다. 내 솔루션은 다음과 같습니다 :

SET @time = '05:00:00'; 

SELECT * FROM `table` 
WHERE IF(
     `start` < `end`, 
     CAST(@time AS TIME) BETWEEN `start` AND `end`, 
     (CAST(@time AS TIME) BETWEEN CAST('00:00:00' AS TIME) AND `end`) OR 
     (CAST(@time AS TIME) BETWEEN `start` AND CAST('24:00:00' AS TIME)) 
    ) = 1; 

희망이 있다면 나중에 도움이 될 것입니다.

마틴에게 감사드립니다.

1

시간은 초 단위로 시간을 비교할 수 있습니다. 기능. 다음을 사용하십시오.

SELECT id 
FROM table1 
WHERE TIME_TO_SEC('2014-03-05 04:17:47') >= TIME_TO_SEC('2014-03-05 04:17:47'); 
관련 문제