Identifier efficacement les chevauchements d'intervalles de temps dans SQL
Problème :
Étant donné deux tables avec des colonnes d'heure de début et de fin, la tâche consiste à identifier les lignes du deuxième tableau qui se chevauchent à intervalles de temps avec chaque ligne du premier tableau. La condition prend également en compte les lignes de la deuxième table avec des heures de fin nulles.
Solution :
À l'aide de la syntaxe SQL Server 2005, la clause WHERE suivante résout efficacement ce problème. problème :
SELECT *
FROM table1,table2
WHERE table2.start <= table1.end
AND (table2.end IS NULL OR table2.end >= table1.start)
Copier après la connexion
Explication :
- La clause table2.start <= table1.end garantit que l'heure de début de tout intervalle de chevauchement potentiel dans table2 se situe dans l'heure de fin de l'intervalle actuel dans table1.
- La deuxième condition, table2.end EST NULL OU table2.end >= table1.start, gère les heures de fin nulles dans la table2. Si l'heure de fin est nulle, elle est considérée comme prolongeant indéfiniment l'intervalle, chevauchant potentiellement tout intervalle ultérieur dans le tableau 1. Alternativement, si l'heure de fin est une valeur valide et qu'elle est supérieure ou égale à l'heure de début de l'intervalle actuel dans le tableau 1, un chevauchement est détecté.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!