Диапазон дат перекрытия MySQL

У меня есть следующие данные;

ID startDate endDate ----------------------------------------------- 1 2010-03-01 10:00:00 2010-03-01 12:00:00 2 2010-03-01 12:30:00 2010-03-01 15:30:00 3 2010-03-01 15:30:00 2010-03-01 18:30:00 

Я хочу проверить, что дата начала и окончания не попадает в диапазоны startDate и endDate в мои данные.

Так, например, следующее будет ОК;

 startDate endDate ----------------------------------------------- 2010-03-01 12:00:00 2010-03-01 12:30:00 2010-03-01 18:30:00 2010-03-01 21:00:00 

но следующие даты потерпят неудачу, поскольку они будут перекрываться;

 startDate endDate ----------------------------------------------- 2010-03-01 09:00:00 2010-03-01 13:00:00 (overlaps ID 1) 2010-03-01 10:30:00 2010-03-01 11:00:00 (overlaps ID 1) 2010-03-01 18:00:00 2010-03-01 19:00:00 (overlaps ID 3) 

Я вытаскиваю свои волосы, потому что могу получить один или два из трех диапазонов дат теста, но не все из них.

Я использую MySQL.

Запрос для выбора перекрытий (я бы назвал столбцы startTime & endTime, хотя время кажется важным …):

 WHERE <start> < endDate AND <end> > startDate 

Это, вероятно, не самый лучший метод, но, может быть, вы можете прочесть что-то из этого примера. Это вернет результат только в том случае, если они будут перекрываться, и я, вероятно, использовал бы это в запросе, который not exists .

 select 1 from myTable where ('03/01/2010 09:00:00' between startDate and endDate) or ('03/01/2010 13:00:00' between startDate and endDate) or (startDate between '03/01/2010 09:00:00' and '03/01/2010 13:00:00') or (endDate between '03/01/2010 09:00:00' and '03/01/2010 13:00:00') 

Ответ Per Wrikken, вероятно, вам нужно проверить, что значения не являются точными совпадениями.

Перекрывающиеся записи:

 SELECT t1.Id, t2.Id, t1.StartDate, t1.EndDate, t2.StartDate, t2.EndDate FROM Table t1, Table t2 WHERE t1.ID <> t2.Id AND (t1.StartDate between t2.StartDate and t2.EndDate OR t1.EndDate between t2.StartDate and t2.EndDate)