MySQL: Compare BETWEEN time
This may be impossible in the way that I'd like to have it work, but here goes.
SELECT * FROM `table` WHERE CAST('05:00:00' AS time) BETWEEN `start` AND `end`
The entries in the database are:
`start` = '22:59:59'
`end` = '06:00:00'
However, the query returns no results. Of course, this would work if there were dates involved, however there are not. It would also work if the start was = '00:00:00'.
Solution 1:
i think what you are looking for is:
SELECT * FROM table WHERE start < CAST('05:00:00' AS time) AND end > CAST('05:00:00' AS time)
I'm not sure if you need to use the CASTs, though this should also work.
SELECT * FROM table WHERE start < '05:00:00' AND end > '05:00:00'
Solution 2:
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`)
Solution 3:
I just came across this question and I had the same problem. My solution is as follow:
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;
Hope it helps someone in the future.
Thank you Martin for the hint!
Solution 4:
We can compare time using simple time to seconds function. Use the following:
SELECT id
FROM table1
WHERE TIME_TO_SEC('2014-03-05 04:17:47') >= TIME_TO_SEC('2014-03-05 04:17:47');