Comparer efficacement les plages de dates dans MySQL
Ce guide montre comment comparer efficacement des plages de dates dans MySQL, en se concentrant sur la détermination des chevauchements entre une plage cible et un ensemble de plages prédéfinies.
Une approche simplifiée
Au lieu de comparer directement les plages pour le chevauchement, une méthode plus efficace consiste à vérifier le nonchevauchement. Cela simplifie le processus logique.
Comprendre les plages qui se chevauchent
Un chevauchement se produit lorsqu'une plage prédéfinie remplit l'une de ces conditions par rapport à la plage cible :
Identification des plages qui ne se chevauchent pas
À l'inverse, les plages qui ne se chevauchent pas satisfont à ces conditions :
Requête SQL pour les plages qui se chevauchent
Pour identifier toutes les lignes du tableau periods
(avec les colonnes range_start
et range_end
) qui chevauchent une plage cible (@check_period_start
, @check_period_end
) :
<code class="language-sql">SELECT * FROM periods WHERE NOT (range_start > @check_period_end OR range_end < @check_period_start);</code>
L'opérateur NOT
inverse la condition, en sélectionnant efficacement uniquement les lignes où il existe un chevauchement.
Requête alternative : vérification directe du chevauchement
Vous pouvez également sélectionner directement les lignes qui se chevauchent :
<code class="language-sql">SELECT * FROM periods WHERE range_start <= @check_period_end AND range_end >= @check_period_start;</code>
Cette requête vérifie directement si le début de la plage prédéfinie est avant ou égal à la fin de la plage cible, et si la fin de la plage prédéfinie est après ou égale au début de la plage cible. Cette approche pourrait être légèrement plus lisible pour certains.
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!