Seien Sie mit ZWISCHEN vorsichtig, da sowohl minals auch maxWerte als im Bereich liegend angesehen werden, um nicht zweimal ein Datum zu verarbeiten, das entweder der minund max-Wert ist (Randfall). Zum Beispiel das Datum 2010-09-29 00:00:00wird zwischen 2010-09-28 00:00:00und2010-09-29 00:00:00 , UND AUCH zwischen 2010-09-29 00:00:00und2010-09-30 00:00:00
minipif
ja, was er gesagt hat ^^
Albert Rannetsperger
Antworten:
471
Ihr zweites Datum liegt vor Ihrem ersten Datum (dh Sie fragen zwischen dem 29. September 2010 und dem 30. Januar 2010 ab). Versuchen Sie, die Reihenfolge der Daten umzukehren:
Ich wusste das, habe aber jetzt ein Problem mit UPDATE. Ich versuche, ZWISCHEN UPDATE zu verwenden, sollte es genauso funktionieren?
Ingus
3
@IngusGraholskis: Eine whereKlausel sollte für selectoder updateAnweisungen gleich funktionieren .
T30
Persönlich finde ich den Begriff "von" und "bis" eine hinterhältige Möglichkeit, sich an die Reihenfolge zu erinnern, in der die Abfrage geschrieben werden soll.
KeaganFouche
Wie kann ich alle Daten zurückgeben, wenn beide Daten null oder leer sind?
Sie können eine Erklärung hinzufügen, damit die Leute verstehen, was Sie tun.
Franz Gleichmann
6
Als Erweiterung der Antwort von @sabin und als Hinweis, ob man das Datum vergleichen möchte nur teilweise (ohne Zeit):
Wenn das zu vergleichende Feld vom Typ datetime ist und nur Daten zum Vergleich angegeben werden, werden diese Daten intern in datetime- Werte konvertiert . Dies bedeutet, dass die folgende Abfrage
Sie können dies manuell tun, indem Sie mit größer als oder gleich und kleiner als oder gleich vergleichen.
select*from table_name where created_at_column >= lower_date and created_at_column <= upper_date;
In unserem Beispiel müssen wir Daten von einem bestimmten Tag abrufen. Wir werden vom Beginn des Tages bis zur letzten Sekunde an einem anderen Tag vergleichen.
select*from table_name where created_at_column >='2018-09-01 00:00:00'and created_at_column <='2018-09-05 23:59:59';
Möglicherweise liegt ein Problem bei der Datumskonfiguration auf der Serverseite oder auf der Clientseite vor. Ich habe festgestellt, dass dies ein häufiges Problem bei mehreren Datenbanken ist, wenn der Host auf Spanisch, Französisch oder was auch immer konfiguriert ist. Dies kann sich auf das Format TT / MM / JJJJ oder MM / TT / JJJJ auswirken.
min
als auchmax
Werte als im Bereich liegend angesehen werden, um nicht zweimal ein Datum zu verarbeiten, das entweder dermin
undmax
-Wert ist (Randfall). Zum Beispiel das Datum2010-09-29 00:00:00
wird zwischen2010-09-28 00:00:00
und2010-09-29 00:00:00
, UND AUCH zwischen2010-09-29 00:00:00
und2010-09-30 00:00:00
Antworten:
Ihr zweites Datum liegt vor Ihrem ersten Datum (dh Sie fragen zwischen dem 29. September 2010 und dem 30. Januar 2010 ab). Versuchen Sie, die Reihenfolge der Daten umzukehren:
quelle
where
Klausel sollte fürselect
oderupdate
Anweisungen gleich funktionieren .Ihre Anfrage sollte das Datum als haben
Versuchen
quelle
Ist
date_field
vom Typdatetime
? Außerdem müssen Sie zuerst das Datum des Ohrhörers angeben.Es sollte sein:
quelle
DATE () ist eine MySQL-Funktion, die nur den Datumsteil eines Datums- oder Datums- / Uhrzeitausdrucks extrahiert
quelle
Als Erweiterung der Antwort von @sabin und als Hinweis, ob man das Datum vergleichen möchte nur teilweise (ohne Zeit):
Wenn das zu vergleichende Feld vom Typ datetime ist und nur Daten zum Vergleich angegeben werden, werden diese Daten intern in datetime- Werte konvertiert . Dies bedeutet, dass die folgende Abfrage
wird konvertiert zu
im Inneren.
Dies führt wiederum zu einem Ergebnis, das die Objekte vom 29.09.2010 mit einem Zeitwert größer als 00:00:00 nicht enthält!
Wenn also auch alle Objekte mit dem Datum 2010-09-29 enthalten sein sollen, muss das zu vergleichende Feld in ein Datum konvertiert werden:
quelle
Sie können dies manuell tun, indem Sie mit größer als oder gleich und kleiner als oder gleich vergleichen.
In unserem Beispiel müssen wir Daten von einem bestimmten Tag abrufen. Wir werden vom Beginn des Tages bis zur letzten Sekunde an einem anderen Tag vergleichen.
quelle
Möglicherweise liegt ein Problem bei der Datumskonfiguration auf der Serverseite oder auf der Clientseite vor. Ich habe festgestellt, dass dies ein häufiges Problem bei mehreren Datenbanken ist, wenn der Host auf Spanisch, Französisch oder was auch immer konfiguriert ist. Dies kann sich auf das Format TT / MM / JJJJ oder MM / TT / JJJJ auswirken.
quelle
Wirf einfach date_field als Datum
quelle
Wenn Sie Datums- und Uhrzeitwerte verwenden, müssen Sie die Felder als
DateTime
und nicht umwandelnDate
. Versuchen :quelle
Versuchen Sie, die Daten zu ändern:
quelle