Gibt es irgendwelche MySQL-Funktionen, um alle Zeilen mit einem Start- oder Enddatum zu erhalten, die zwischen einem gegebenen Start- und Enddatum liegen?

7

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?

    
Thomas Owens 10.11.2008, 14:13
quelle

5 Antworten

16

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%     
Robert Gamble 10.11.2008, 14:21
quelle
7

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)

    
Greg 10.11.2008 14:32
quelle
3
%Vor%

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.

    
Bill the Lizard 10.11.2008 14:21
quelle
1

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.

    
Ilya 10.11.2008 14:25
quelle
0

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

??

    
Paul 16.12.2008 20:48
quelle

Tags und Links