Ich habe eine Tabelle von Ereignissen mit einer aufgezeichneten Start- und Endzeit als MySQL DATETIME-Objekt (im Format YYYY-MM-DD HH:MM:SS
. Ich möchte alle Ereignisse finden, die in einem bestimmten Zeitraum auftreten. Ereignisse können jedoch mehrere Tage umfassen (und zwar außerhalb meines Datumsbereichs, aber ich möchte sie zurückgeben, wenn sie sich mit meinem Datumsbereich sogar um 1 Sekunde oder mehr überlappen).
Vorschläge?
Dies wird jedes Ereignis finden, das vollständig innerhalb des Bereichs enthalten ist:
%Vor%Damit werden alle Ereignisse gefunden, bei denen ein Teil des Ereignisses einen Teil des Bereichs überlappt:
%Vor%Die Antworten von @Bill the Lizard und @Robert Gamble sind korrekt für die gestellte Frage, aber ich frage mich, ob Sie fragen, was Sie denken, Sie sind ... Wenn Sie nach überlappenden Ereignissen suchen, dann brauchen Sie Ereignisse, die länger als Ihr Suchbereich sind, berücksichtigen.
%Vor%Wenn Sie SO hinzufügen möchten, tun Sie Folgendes:
SELECT * FROM table WHERE (start_date < end_of_range AND end_date > start_of_range)
sollte für Sie arbeiten.
Stellen Sie sicher, dass Sie "Startdatum" und "Enddatum" mit der Uhrzeit angeben.
%Vor%Dies wird helfen, Fehler zu vermeiden, wenn die Daten gleich sind, aber Ihre Zeit innerhalb des Intervalls um einige Stunden, Minuten oder Sekunden liegt.
Grundsätzlich können Sie regelmäßige Vergleiche verwenden - die oben genannten sollten funktionieren - der Trick besteht darin, alle verschiedenen Fälle zu überprüfen, die auftreten können.
A) Ereignisse mit einem Enddatum innerhalb des Bereichs
B) Ereignisse mit einem Anfangsdatum innerhalb des Bereichs
C) Ereignisse mit Start- und Enddatum im Bereich
D) Ereignisse mit Start- und Enddatum außerhalb des Bereichs, aber überlappend
Roberts Antwort ist eine gute, aber es berücksichtigt Fall D nicht, wo das Ereignis vor dem Bereich beginnt und nach dem Bereich endet.
Llya, Roberts antwortet mit
SELECT * FROM Tabelle WHERE start_date & lt; = end_of_range UND stop_date & gt; = start_of_range
funktioniert gut mit
D) Ereignisse mit Start- und Enddatum außerhalb des Bereichs, aber überlappend
??
Tags und Links mysql