Die folgende Abfrage:
SELECT * FROM `objects`
WHERE (date_field BETWEEN '2010-09-29 10:15:55' AND '2010-01-30 14:15:55')
gibt nichts zurück.
Ich sollte mehr als genug Daten haben, damit die Abfrage funktioniert. Was mache ich falsch?
Ihr zweiter Termin liegt vor Ihrem ersten Termin (dh Sie fragen zwischen dem 29. September 2010 und dem 30. Januar 2010 ab). Versuchen Sie die Reihenfolge der Daten umzukehren:
SELECT *
FROM `objects`
WHERE (date_field BETWEEN '2010-01-30 14:15:55' AND '2010-09-29 10:15:55')
Ihre Anfrage sollte Datum haben als
select * from table between `lowerdate` and `upperdate`
versuchen
SELECT * FROM `objects`
WHERE (date_field BETWEEN '2010-01-30 14:15:55' AND '2010-09-29 10:15:55')
Ist date_field
vom Typ datetime
_? Sie müssen auch das frühere Datum zuerst eingeben.
Es sollte sein:
SELECT * FROM `objects`
WHERE (date_field BETWEEN '2010-01-30 14:15:55' AND '2010-09-29 10:15:55')
DATE () ist eine MySQL-Funktion, die nur den Datumsteil eines Datums- oder Datums-/Uhrzeitausdrucks extrahiert
SELECT * FROM table_name WHERE DATE(date_field) BETWEEN '2016-12-01' AND '2016-12-10';
Als Erweiterung zur Antwort von @sabin und als Hinweis, wenn nur der Teil date (ohne Zeitangabe) verglichen werden soll:
Wenn das zu vergleichende Feld vom Typ datetime ist und nur dates zum Vergleich angegeben werden, werden diese dates intern in datetime -Werte konvertiert. Dies bedeutet die folgende Abfrage
SELECT * FROM `objects` WHERE (date_time_field BETWEEN '2010-01-30' AND '2010-09-29')
wird in konvertiert
SELECT * FROM `objects` WHERE (date_time_field BETWEEN '2010-01-30 00:00:00' AND '2010-09-29 00:00:00')
im Inneren.
Dies führt wiederum zu einem Ergebnis, das die Objekte vom 2010-09-29 nicht mit einem Zeitwert größer als 00:00:00 enthält!
Wenn also auch alle Objekte mit Datum 2010-09-29 enthalten sein sollen, muss das zu vergleichende Feld in ein Datum konvertiert werden:
SELECT * FROM `objects` WHERE (DATE(date_time_field) BETWEEN '2010-01-30' AND '2010-09-29')
Sie können dies manuell tun, indem Sie mit größer 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 den Beginn eines Tages mit der letzten Sekunde eines anderen Tages 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';
Könnte ein Problem mit der Datumskonfiguration auf der Serverseite oder auf der Clientseite sein .. __ Ich habe festgestellt, dass dies ein häufiges Problem in mehreren Datenbanken ist, wenn der Host auf Spanisch, Französisch oder was auch immer konfiguriert ist und das Format beeinflussen könnte tt/mm/jjjj oder mm/tt/jjjj.
Wenn Sie Datum und Time-Werte verwenden, müssen Sie die Felder als DateTime
und nicht als Date
..__ umwandeln. Versuchen Sie:
SELECT * FROM `objects`
WHERE (CAST(date_field AS DATETIME)
BETWEEN CAST('2010-09-29 10:15:55' AS DATETIME) AND CAST('2010-01-30 14:15:55' AS DATETIME))
Versuchen Sie, die Daten umzustellen:
2010-09-29 > 2010-01-30?
Date_field einfach als Datum umsetzen
SELECT * FROM `objects`
WHERE (cast(date_field as date) BETWEEN '2010-09-29' AND
'2010-01-30' )