определить диапазон дат попадает между другой диапазон дат в 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, но он предпочтителен.

2 ответов


как вы можете получить daterange1 = 0, так как это диапазон, то есть 2 значения?

правильный тест для перекрывающихся дат

CASE WHEN @range1start <= @range2end
      and @range2start <= @range1end THEN 1 ELSE 0 END

Если вы имеете в виду, что daterange2 должен полностью подпадать под daterange1, то

CASE WHEN @range1start <= @range2start
      and @range2end <= @range1end THEN 1 ELSE 0 END

выберите * из t где (beginningdate между startdate и closedate Или окончание между startdate и closedate Или (beginningdate = closedate));