2012-10-11 17 views
12

Sto cercando di scoprire se c'è un modo in sql (t-sql preferito) per identificare se un intervallo di date cade tra un altro intervallo di date.determinare se intervallo di date cade tra un altro intervallo di date - sql

ai fini del mio esempio: daterange1 = Ho un intervallo di date definito, sono date 1/1/2012 - 1/5/2012 daterange2 = Ho altri due date con cui lavorare, consente di dire 1/3/2012 e 1/4/2012

sto cercando di avere questa opzione per utilizzare in una dichiarazione CASE per qualcosa di simile

CASE 
    WHEN daterange1 = 0 then result1 
    WHEN daterange2 falls within daterange1 then result2 
    END as datestuff 

questo è possibile in SQL? Sono davvero perplesso su questo, so come capire se una singola data cade tra un intervallo, ma come può essere fatto con un intervallo di date? la risposta non deve necessariamente essere in un'istruzione CASE, ma è preferibile.

risposta

23

Come è possibile ottenere daterange1 = 0, poiché è un intervallo, ovvero 2 valori?

Il test adeguato per le date che si sovrappongono è

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

Se vuoi dire che daterange2 deve rientrare interamente all'interno daterange1, quindi

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

grazie, ho pensato che doveva essere qualcosa di simile, solo couldnt capirlo – wondergoat77

+0

secondo era esattamente quello che mi serviva, grazie ancora – wondergoat77

+0

Grazie mille. Lo apprezzo. – amilaishere

-1

select * da t dove (beginningdate tra startdate e closedate O termina tra startdate e closedate OR (data di inizio < data di inizio e di fine> = chiusura));

Problemi correlati