2013-09-17 6 views
0

Я пытаюсь найти SQL-запрос, который будет проверять, находится ли данный диапазон дат в другом, или охватывает его верхнюю или нижнюю границу, или полностью обертывает его. Сейчас у меня есть 3 отдельных запроса, но я уверен, что их можно упростить.Диапазон дат в пределах диапазона и более

Любые предложения?

SELECT * FROM TABLE 
WHERE 
-- SURROUNDING 
(DATE1 <= START_DT - 1 DAY AND DATE2 >= END_DT + 1 DAY) 
-- ENCOMPASSED 
OR(DATE1 >= START_DT AND DATE2 <= END_DT) 
-- STRADDLED 
OR(DATE1) BETWEEN START_DT AND END_DT 
OR (DATE2) BETWEEN START_DT AND END_DT 

DATE1 -> RANGE -> DATE2

START RANGE -> DATE1 -> DATE2 -> END RANGE

DATE1 -> START RANGE -> DATE2 -> END RANGE

ДИАПАЗОН ДИАПАЗОНА -> ДАТА1 -> КОНЕЦ ДИАПАЗОН -> ДАТА2

И как примечание + или - один день на данном диапазоне; Straddled может начать последний день (или на следующий день после) остановки диапазона и т. д.

+0

Опубликуйте свои текущие запросы, чтобы показать, что вы пробовали. – Yaroslav

ответ

3

Вам необходимо проверить два условия, чтобы определить, перекрываются ли два диапазона. Если начало первого - до конца второго, и если конец первого начинается после начала второго.

where (
    range_1_min_date <= range_2_max_date 
    and 
    range_1_max_date >= range_2_min_date 
) 

Добавлено: Чтобы представить себе, почему это условие, enter image description here рассмотрим базовый диапазон (range_1, как показано в нижней части диаграммы), а затем думать обо всех различных других возможностей для date_range_2.

Используя диаграмму, просмотрите приведенные выше условия для каждого из указанных диапазонов, и вы увидите, почему это работает.

+0

Разве это не то, что между тестированием? – crownedzero

+0

Нет, это точно так. Он проверяет, что начало или конец одного диапазона находится между началом и концом другого диапазона. Таким образом, он проверяет только часть условий для перекрывающихся диапазонов, и именно поэтому в вашем примере требуются другие условия. – Brian

+0

, так что я направился в правильном направлении и не чрезмерно смущал? – crownedzero

Смежные вопросы