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>
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 :
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>
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!