it-swarm.com.de

Filtern nach Datumsformat-MYSQL-Formatierung

Ich habe eine Mysql-Tabelle, die für eine Protokolldatei in dieser Tabelle verwendet wird. Es gibt ein Feld namens 'log_date'. Es speichert das Datum im folgenden Format (% Y-% m-% d% H:% i.% S ) .Das Datum sieht in der DB so aus, als ob dies 2013-20-05 00: 00.00 Uhr wäre. Nehmen wir an, das heutige Datum ist 2013-20-05. Ich habe Protokolldateien vom 01.01.2013 bis zum heutigen Tag. Wenn ich eine Abfrage wie diese starte:

SELECT * FROM log_table
WHERE STR_TO_DATE(log_date, '%Y-%m-%d %H:%i.%s') < '2013-05-05 00:00.00'

Dies gibt jede Zeile in der Datenbank zurück, einschließlich Zeilen, die größer als 2013-05-05 00: 00.00 sind

Und wenn ich das <(weniger) in eine> (größere als) umwandle, mit einer Abfrage, die wie folgt aussieht: 

SELECT * FROM log_table
WHERE STR_TO_DATE(log_date, '%Y-%m-%d %H:%i.%s') > '2013-05-05 00:00.00'

Dann werden NULL-Zeilen zurückgegeben. Ich denke, der Zeitstempel verursacht das Problem, das ich mit dem Datumsformat zuvor gearbeitet habe, nicht jedoch das DateTime-Format. Warum passiert dies?

13
Ryan Bauer

log_date sollte vom DateTime-Datentyp sein. Die Verwendung der MySQL DATE-Funktion ist viel einfacher. Einige Beispiele

SELECT * FROM log_table
WHERE DATE(log_date) < '2013-05-05'

SELECT * FROM log_table
WHERE DATE(log_date) > '2013-05-05'

SELECT * FROM log_table
WHERE DATE(log_date) BETWEEN '2013-04-05' AND '2013-05-05'

SELECT * FROM log_table
WHERE DATE(log_date) BETWEEN DATE(CURRENT_DATE() - INTERVAL 2 WEEK) AND 
DATE(CURRENT_DATE() + INTERVAL 4 DAY)
22
blotto

Sie können es versuchen.

  WHERE DATE_FORMAT(AUCTION_DATE, '%Y%m%d') >= DATE_FORMAT('2013/5/18', '%Y%m%d')

Sie können das heutige Datum auch mit der Funktion now () erhalten.

0
Cataclysm