Сравнение временных диапазонов - PullRequest
0 голосов
/ 13 июля 2009

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

Сравнение диапазонов дат

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

  • 19: 00 - 20: 00
  • 21: 00 - 21: 30
  • 23: 00 - 01: 00
  • 01: 00 - 03: 00

Я хочу найти любые строки, где времена пересекаются / перекрываются 23:30 - 00:30. Код, который у меня есть, работает только в том случае, если и строки в БД, и временной диапазон, который я хочу проверить, начинаются и заканчиваются в один и тот же день.

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

1 Ответ

0 голосов
/ 12 декабря 2011

Вот ответ в SQL SERVER - mysql будет похож на

DECLARE @StartTime TIME, @EndTime TIME, @CheckTime TIME
SET @StartTime = '20:00'
SET @EndTime = '06:00'
SET @CheckTime = '22:59'

IF @StartTime <= @EndTime
BEGIN
    --same day eg 6pm - 11pm
    IF @CheckTime >= @StartTime AND @CheckTime <= @EndTime
        SELECT 'True'
    ELSE
        SELECT 'False'
END
ELSE
BEGIN
    --overlaps midnight
    IF @CheckTime >= @EndTime OR @CheckTime <= @StartTime 
        SELECT 'true'
    ELSE
        SELECT 'false'
END
...