Un problème classique avec les bases de données est la comparaison de deux intervalles de date. Mon intervalle A est il compris dans mon intervalle B ?
Avec un peu de réflexion c’est un problème très simple a résoudre.
L’illustration précente définie un intervalle de base (le gris) et toute les possibilités de bons (vert) et mauvais (rouge) intervalles.
Mon intervalle B est donc compris dans A si il ne fini pas avant le début de A et qu’il ne commencent pas après la fin de A.
En supposant que votre intervalle de date est décrit par deux champs date , on pourrait traduire cela par :
SELECT * FROM maTable WHERE NOT(date_debut > 2011-12-31 OR date_fin < 2011-01-01);
Dans cet exemple je cherche donc toute les dates qui ne commencent pas (NOT) après le 31 décembre 2011 ou qui ne se finisse pas avant le 1er janvier 2011.
En modifiant un peu la logique on peut supprimer le NOT qui n’aide pas forcément à la compréhension :
SELECT * FROM maTable WHERE date_debut < 2011-12-31 AND date_fin > 2011-01-01;
Cette fois je récupère donc toutes les dates qui commencent avant le 31/12/2011 et qui se termine après le 01/01/2011
Dans ce cas là on parle plus d’intersection entre les intervalles et non l’un compris dans l’autre…