Maison > base de données > tutoriel mysql > Comment puis-je trouver efficacement des plages de dates qui se chevauchent dans PostgreSQL ?

Comment puis-je trouver efficacement des plages de dates qui se chevauchent dans PostgreSQL ?

Susan Sarandon
Libérer: 2025-01-05 10:41:40
original
688 Les gens l'ont consulté

How Can I Efficiently Find Overlapping Date Ranges in PostgreSQL?

Recherche de plages de dates qui se chevauchent dans PostgreSQL

Lorsque vous travaillez avec des plages de dates dans PostgreSQL, l'identification des chevauchements est une tâche cruciale. La requête fournie tente de trouver des joueurs qui faisaient partie d'une équipe pendant des années spécifiques, mais contient des erreurs.

Le problème avec la requête fournie

La requête inclut une condition BETWEEN ( DATE_PART('YEAR',date_join) >= ? AND DATE_PART('YEAR',date_leave) <= ?), qui vérifie si le Les composants year des colonnes date_join et date_leave se trouvent dans la plage spécifiée. Cependant, il utilise de manière incorrecte les opérateurs >= et <=, qui incluent la limite supérieure (fin d'année).

La requête corrigée

Pour trouver correctement les chevauchements plages, nous devons ajuster les conditions pour exclure la limite supérieure :

SELECT * 
FROM   contract 
JOIN   team USING (name_team) 
JOIN   player USING(name_player) 
WHERE  name_team = ? 
AND    DATE_PART('YEAR',date_join) >= ? 
AND    DATE_PART('YEAR',date_leave) < ?</p>
<p><strong>Solution alternative utilisant la plage Types</strong></p>
<p>PostgreSQL versions 9.2 et ultérieures prennent en charge les types de plage. Voici une requête qui utilise un type de plage et l'opérateur &&& pour rechercher des plages de dates qui se chevauchent :</p>
<pre class="brush:php;toolbar:false">SELECT DISTINCT name_player 
FROM   contract
WHERE  name_team = ? 
AND    daterange(date_join, date_leave) &&&
       daterange '[2009-01-01,2010-01-01)'
Copier après la connexion

Cette requête exploite l'opérateur de chevauchement &&& et un type de plage spécialement défini pour rechercher des plages de dates qui se chevauchent sans avoir besoin de limite explicite. chèques.

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