Heim >Datenbank >MySQL-Tutorial >Wie identifiziere ich überlappende Datumsbereiche in MySQL?

Wie identifiziere ich überlappende Datumsbereiche in MySQL?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-19 13:12:10150Durchsuche

How to Identify Overlapping Date Ranges in MySQL?

Identifizieren überlappender Datumsbereiche in MySQL

Problem:

Betrachten wir eine Tabelle, die speichert Veranstaltungssitzungen mit ihrem jeweiligen Start- und Enddatum. Unser Ziel ist es sicherzustellen, dass es zwischen den Sitzungen keine Konflikte gibt. Insbesondere möchten wir überlappende Sitzungen finden, wenn wir versuchen, eine neue Sitzung innerhalb eines bestimmten Datumsbereichs einzufügen.

Abfrage:

Um potenzielle Konflikte zu identifizieren, können wir die verwenden Folgende Abfrage:

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;

Die Abfrage verstehen:

Diese Abfrage prüft auf drei Bedingungen, die auf mögliche Überschneidungen hinweisen:

  1. Wenn das vorgeschlagene Startdatum („05.01.2010“) in den Datumsbereich einer bestehenden Sitzung fällt (ZWISCHEN Startdatum UND Enddatum).
  2. Wenn das vorgeschlagene Enddatum („25.01.2010“) in den Datumsbereich einer bestehenden Sitzung fällt (ZWISCHEN start_date UND end_date).
  3. Wenn der vorgeschlagene Datumsbereich (von „05.01.2010“ bis „25.01.2010“) den Datumsbereich einer vorhandenen Sitzung vollständig überschneidet (>= Startdatum UND <= Enddatum) .

Alternativer Ansatz:

An alternative Abfrage, die genaue Ergebnisse garantiert:

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

Erklärung:

Diese Abfrage verwendet eine logische Auswertung basierend auf vier Variablen:

  • new_start: Das Startdatum der vorgeschlagenen Sitzung („2010-01-05“).
  • new_end: Das Enddatum der vorgeschlagenen Sitzung („25.01.2010“).
  • existing_start: Das Startdatum der vorhandenen Sitzung.
  • existing_end: Das Enddatum der vorhandenen Sitzung.

Die Abfrage gibt überlappende Sitzungen zurück, wenn das Startdatum der neuen Sitzung vor dem Enddatum einer vorhandenen Sitzung liegt UND das Enddatum der neuen Sitzung davor liegt nach dem Startdatum einer bestehenden Sitzung.

Das obige ist der detaillierte Inhalt vonWie identifiziere ich überlappende Datumsbereiche in MySQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn