选择与给定时间范围重叠的记录

时间:2011-12-04 03:29:03

标签: mysql

假设我有下表:

id  |   value   |   start_time  |   stop_time
-----------------------------------------------------------------
1   |   value1  |   06:00:00    |   11:00:00
2   |   value2  |   12:00:00    |   13:00:00

我需要选择时间范围与05:00-11:30重叠的记录。这意味着要返回的记录是第1行。

我尝试使用这样的查询,但是当给定的时间范围超过午夜时它会失败。如果没有涉及约会,也许不可能做到这一点。

SELECT * FROM table WHERE 
(
    (start_time >= '05:00:00' AND stop_time <= '11:30:00') ||
    (start_time >= '05:00:00' AND start_time <= '05:00:00') ||
    (start_time <= '05:00:00' AND stop_time >= '11:30:00') ||
    (stop_time >= '11:30:00' AND stop_time <= '05:00:00')
)

我正在考虑枚举给定时间范围的所有分钟并使用BETWEEN进行过滤,但可能有更好的解决方案。

2 个答案:

答案 0 :(得分:0)

戴夫,

我能看到的最简单的方法是为start_time和'stop_time`字段使用'TIME'类型。 然后你可以这样选择:

SELECT * FROM `YOUR_TABLE_NAME_HERE` WHERE `start_time` > '05:00:00' AND `stop_time` < '11:30:00'

答案 1 :(得分:0)

每个范围都需要用条件表示,如下所示:

IF(start_time < stop_time, start_time >= '05:00:00' AND stop_time <= '11:30:00', start_time <= '05:00:00' AND stop_time >= '11:30:00')