Je sais que ce post est ancien mais je pense que la réponse acceptée est incomplète. Il doit y avoir au moins un autre cas d'intersection et modifier ce qui précède.
INTERSECTION (FIXE)
Date Range 1 | |>----------------------<|
Date Range 2 | |>------------------------<|
WHERE Range1Start <= Range2Start AND Range1End <= Range2End AND Range1End>=Range2Start
Cette correction permet d'éviter de détecter l'intervalle 2 dans l'intervalle 1 comme une intersection (ce qui est le résultat de la requête dans la solution acceptée).
Les deux suivants sont corrects mais ne sont pas bien illustrés
Plage 1 dans Plage 2
Date Range 1 | |>-------------<|
Date Range 2 | |>------------------------<|
Date Range 1 | |>------------------------<|
Date Range 2 | |>------------------------<|
WHERE Range1Start >= Range2Start AND Range1End <= Range2End
Plage 2 dans la plage 1 :
Date Range 1 | |>------------------------<|
Date Range 2 | |>-------------<|
Date Range 1 | |>------------------------<|
Date Range 2 | |>------------------------<|
WHERE Range2Start >= Range1Start AND Range2End <= Range1End
Et enfin la deuxième intersection
INTERSECTION (DROITE)
Date Range 1 | |>----------------------<|
Date Range 2 | |>------------------------<|
WHERE Range2Start <= Range1Start AND Range2End <= Range1End AND Range1Start <=Range2End
En fonction de ce dont vous avez besoin, je suggérerais de ne pas utiliser plus grand que (>=) et moins que (<=), car vous supposez également que les périodes égales sont dans ces groupes, mais c'est à vous de décider.
EQUALS RANGES
Date Range 1 | |>------------------------<|
Date Range 2 | |>------------------------<|
WHERE Range1Start = Range2Start AND Range1End = Range2End