Ich habe die folgenden Tabellendaten:
%Vor% Ich muss eine Abfrage ausführen, die alle Datensätze zurückgibt, die sich in einem bestimmten Datumsbereich befinden, zum Beispiel: gebe alle Datensätze zurück, die von 2013-09-04 to 2013-09-05
es wäre wie
%Vor%also sollte es die ersten 2 Datensätze zurückgeben. Ich habe die Abfrage mit BETWEEN versucht, aber es scheint, dass ich mehrere Fälle aufbauen muss - oder gibt es einen einfacheren Weg? Dankeschön
Es ist erstaunlich, dass dies seit fast zwei Jahren niemand mehr bemerkt hat, aber die anderen Antworten sind alle falsch , weil sie den Fall nicht berücksichtigten, wenn sowohl das Startdatum als auch das Enddatum überschritten wurden der Umfang des Suchbereichs. Betrachten Sie dies als den Bereich des Datums:
%Vor%Und das ist der Bereich unserer Suche:
%Vor% Die Suche sollte uns ein positives Ergebnis geben, weil sie sich schneiden. Wenn Sie jedoch die anderen Antworten verwenden, erhalten Sie ein negatives Ergebnis, da weder start_date
noch end_date
zwischen start_search
und end_search
sind.
Um die Lösung zu erhalten, zeichnen wir alle 4 möglichen Modi der Schnittmenge:
%Vor% %Vor% %Vor% %Vor% Sie können OR
alle 4 möglichen Fälle, um die einfache Lösung zu erhalten:
Eine weniger einfache Lösung ist:
%Vor%Versuchen Sie, es anhand der obigen Diagramme zu visualisieren.
Wenn wir versuchen, ein Muster aus den obigen 4 Diagrammen zu extrapolieren, können wir sehen, dass während eines Schnittpunktsend_date
immer >= start_search
ist und umgekehrt start_date
immer <= end_search
. In der Tat können wir, wenn wir weiter visualisieren, sehen, dass , wenn diese beiden Bedingungen gelten, wir keine Schnittmenge haben .
Als solche ist eine andere Lösung so einfach wie:
%Vor% Und der Vorteil dieser Lösung ist, dass wir nur zwei Vergleiche benötigen. Vergleichen Sie dies mit dem Ansatz " OR
everything", der von 2 bis zu 8 (3 & amp; plus; 3 & amp; plus; 2) Vergleiche erfordert. (Jeder between
Aufruf besteht aus 3 Vergleichen .)
Dies sollte funktionieren
%Vor%** Stellen Sie sicher, dass das Datum in mysql default formate (JJJJ-MM-ff hh: mm: ss)
ist