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?
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)
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.