Maison > base de données > tutoriel mysql > Comment puis-je comparer efficacement les plages de dates dans MySQL ?

Comment puis-je comparer efficacement les plages de dates dans MySQL ?

DDD
Libérer: 2025-01-18 08:21:09
original
926 Les gens l'ont consulté

How Can I Efficiently Compare Date Ranges in MySQL?

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 :

  • Confinement complet : La plage prédéfinie se situe entièrement dans la plage cible.
  • Chevauchement partiel : La plage prédéfinie se chevauche soit à son point de début, soit à son point de fin.
  • Chevauchement complet : La plage prédéfinie englobe complètement la plage cible.

Identification des plages qui ne se chevauchent pas

À l'inverse, les plages qui ne se chevauchent pas satisfont à ces conditions :

  • Précède la cible : La plage prédéfinie se termine avant le début de la plage cible.
  • Suit la cible : La plage prédéfinie commence après la fin de la plage cible.

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal