Maison >base de données >tutoriel mysql >Comment identifier les plages de dates qui se chevauchent dans MySQL ?

Comment identifier les plages de dates qui se chevauchent dans MySQL ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-19 13:12:10170parcourir

How to Identify Overlapping Date Ranges in MySQL?

Identification des plages de dates qui se chevauchent dans MySQL

Problème :

Considérons une table qui stocke sessions événementielles avec leurs dates de début et de fin respectives. Nous visons à garantir qu’il n’y a pas de conflits entre les sessions. Plus précisément, nous souhaitons trouver des sessions qui se chevauchent lorsque nous essayons d'insérer une nouvelle session dans une plage de dates donnée.

Requête :

Pour identifier les conflits potentiels, nous pouvons utiliser l'outil requête suivante :

SELECT *
FROM session
WHERE "2010-01-05" BETWEEN start_date AND end_date
   OR "2010-01-25" BETWEEN start_date AND end_date
   OR "2010-01-05" >= start_date AND "2010-01-25" <= end_date;

Comprendre la requête :

Cette requête vérifie trois conditions qui indiquent des chevauchements potentiels :

  1. Si la date de début proposée ("2010-01-05") se situe dans la plage de dates d'une session existante (ENTRE start_date ET end_date).
  2. Si la date de fin proposée ("2010-01-25") se situe dans la plage de dates d'une session existante (ENTRE start_date ET end_date).
  3. Si la plage de dates proposée (du "2010-01-05" au "2010-01-25") chevauche entièrement la plage de dates d'une session existante (>= start_date AND <= end_date) .

Approche alternative :

Une requête alternative qui garantit des résultats précis :

SELECT *
FROM session
WHERE new_start < existing_end
      AND new_end   > existing_start;

Explication :

Cette requête utilise une évaluation logique basée sur quatre variables :

  • new_start : La date de début de la session proposée ("2010-01-05").
  • new_end : La fin date de la session proposée ("2010-01-25").
  • existing_start : La date de début de la session existante.
  • existing_end : La date de fin de la session existante.

La requête renvoie des sessions qui se chevauchent si la date de début de la nouvelle session est antérieure à la date de fin d'une session existante, ET la date de fin de la nouvelle session est après la date de début de toute session existante.

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!

Déclaration:
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