检测两个时间是否发生冲突/交叉

时间:2011-07-06 04:10:34

标签: mysql datetime

我目前正在开发一个事件管理系统,数据库存储时间段:

SlotId | DateTime            | Duration  
-------+---------------------+---------------
 1     | 2011-06-06 15:00:00 | 5.0
 2     | 2011-06-06 14:00:00 | 3.0
 3     | 2011-06-07 11:00:00 | 8.0

请注意,DurationDOUBLE小时,DateTimeTIMESTAMP

在表格中,我们可以清楚地看到时隙1和2发生冲突,而时隙2和2则发生冲突。 3和时隙1& 3不会发生冲突。我们如何编写SQL语句来检测两个时隙之间的冲突?

1 个答案:

答案 0 :(得分:1)

也许我很困惑,但看起来这三个时间段都重叠了。因为他们分别从11:00 - 19:00,14:00-17:00和15:00 - 20:00(按照您的顺序,按时间顺序按开始时间)。但是,如果我正确理解你的表,这里是找到重叠的代码

SELECT CONCAT(T1.SlotId,  ' Overlaps ', T2.SlotId)
FROM YourTable AS T1 JOIN YourTable AS T2 
WHERE T1.SlotId <> T2.SlotId AND 
    T1.DateTime <= T2.DateTime AND 
    DATE_ADD(T1.DateTime,INTERVAL SEC_TO_TIME(T1.Duration * 3600) HOUR_SECOND) > T2.DateTime