Определить, совпадают ли два момента времени / пересекаются или нет - PullRequest
0 голосов
/ 06 июля 2011

В настоящее время я занимаюсь разработкой системы управления событиями, в которой база данных хранит временные интервалы следующим образом:

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 в часах, а DateTime - TIMESTAMP,

В таблице четко видно, что временные интервалы 1 и 2 конфликтуют, тогда как временные интервалы 2 и 3 и временные интервалы 1 и 3 не конфликтуют.Как мы можем написать оператор SQL для обнаружения столкновений между двумя временными интервалами?

1 Ответ

1 голос
/ 06 июля 2011

Может быть, я запутался, но похоже, что все эти три временных интервала перекрываются. Поскольку они отправляются с 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...