Maison > base de données > tutoriel mysql > Comment pouvons-nous identifier efficacement les plages de dates qui se chevauchent dans SQL ?

Comment pouvons-nous identifier efficacement les plages de dates qui se chevauchent dans SQL ?

Barbara Streisand
Libérer: 2025-01-18 08:13:08
original
496 Les gens l'ont consulté

How Can We Efficiently Identify Overlapping Date Ranges in SQL?

Comparaison des plages de dates SQL

Lorsque vous travaillez avec des plages de dates stockées dans la base de données, il peut être nécessaire de déterminer si une plage de dates spécifique chevauche des plages existantes. Il s'agit d'un problème récurrent dans les bases de données SQL.

Une façon de résoudre ce problème est d'inverser la logique de comparaison. Au lieu de rechercher des plages qui chevauchent une plage donnée, nous recherchons des plages qui ne se chevauchent pas. En identifiant les périodes qui ne se chevauchent pas, nous pouvons conclure que les périodes restantes sont celles qui se chevauchent.

Pour illustrer cette logique, examinons l'exemple suivant :

<code>           |-------------------|          与之比较
               |---------|                包含在内
           |----------|                   包含在内,起始时间相同
                   |-----------|          包含在内,结束时间相同
           |-------------------|          包含在内,起始和结束时间相同
     |------------|                       未完全包含,起始时间重叠
                   |---------------|      未完全包含,结束时间重叠
     |-------------------------|          起始时间重叠,范围更大
           |-----------------------|      结束时间重叠,范围更大
     |------------------------------|     完全重叠</code>
Copier après la connexion

Comme le montre la figure, les périodes qui ne chevauchent pas la période de comparaison commencent soit après la fin de la période de comparaison, soit se terminent avant le début de la période de comparaison.

En revanche, les périodes qui chevauchent la période de comparaison entrent dans les catégories suivantes :

  • Inclus dans la période de comparaison
  • Contenu dans la période de comparaison, avec la même heure de début ou de fin
  • Chevauchements avec l'heure de début ou de fin de la période de comparaison
  • Périodes de comparaison qui se chevauchent complètement

En traduisant cette logique en SQL, nous pouvons utiliser la requête suivante pour récupérer toutes les époques qui chevauchent une époque de contrôle donnée :

<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

En inversant la logique pour trouver des époques qui ne se chevauchent pas, nous pouvons efficacement identifier et exclure ces époques des résultats, laissant une liste d'époques correspondantes.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal