检测两个定时是否冲突/相交



我目前正在开发一个事件管理系统,其中数据库存储时隙如下:

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

注意,Duration是以小时为单位的DOUBLE,而DateTimeTIMESTAMP

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

也许我很困惑,但看起来这三个时隙都重叠了。因为它们分别从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

相关内容

  • 没有找到相关文章

最新更新