Определить, находится ли диапазон дат между другим диапазоном дат - sql
Я пытаюсь выяснить, есть ли способ в sql (предпочтительный t-sql), чтобы определить, падает ли диапазон дат между другим диапазоном дат.
для моего примера:
daterange1 = я имеет определенный диапазон дат, даты - 1/1/2012 - 1/5/2012
daterange2 = У меня есть еще две даты для работы, скажем, 1/3/2012 и 1/4/2012
Я пытаюсь использовать это в операторе CASE для чего-то вроде этого
CASE
WHEN daterange1 = 0 then result1
WHEN daterange2 falls within daterange1 then result2
END as datestuff
это возможно в SQL? Я на самом деле тупик в этом вопросе, я знаю, как выяснить, существует ли одна точка между диапазоном, но как это можно сделать с диапазоном дат? ответ необязательно должен быть в операторе CASE, но он предпочтителен.
Ответы
Ответ 1
Как вы можете получить daterange1 = 0
, так как это диапазон, т.е. 2 значения?
Правильный тест для перекрывающихся дат
CASE WHEN @range1start <= @range2end
and @range2start <= @range1end THEN 1 ELSE 0 END
Если вы имеете в виду, что daterange2 должен упасть ENTIRELY внутри daterange1, тогда
CASE WHEN @range1start <= @range2start
and @range2end <= @range1end THEN 1 ELSE 0 END
Ответ 2
выберите *
от t
где (начало отсчета между стартовым и закрытым
ИЛИ заканчивается с даты начала и закрытия
OR (begindate < startdate и enddate >= closedate));