Heim >Datenbank >MySQL-Tutorial >Warum führt der MySQL-Datumsvergleich mit date_format zu unerwarteten Ergebnissen?
Vergleich von MySQL-Daten mit date_format
Obwohl ein Benutzer mehrere Datumsvergleichsmethoden ausprobierte, stieß er auf ein unerwartetes Ergebnis. Sie wollten Datumsangaben im Format „%d-%m-%Y“ vergleichen, enthielten jedoch einen fehlerhaften Datensatz im Ergebnissatz.
Das Problem entsteht durch den Vergleich von Zeichenfolgen anstelle von Datumsangaben. Die Funktion date_format wandelt Datumsangaben in Zeichenfolgen um, wodurch der Vergleich für die lexikografische Reihenfolge geeignet ist. Beispielsweise ist „28-10-2012“ alphabetisch größer als „02-11-2012“ und wird daher in die Ergebnismenge aufgenommen, obwohl es chronologisch früher liegt.
Um dieses Problem zu beheben, sollte der Vergleich durchgeführt werden Datumsangaben anstelle von Zeichenfolgen. Mit der Datumsfunktion kann die Datumskomponente aus einem DATETIME- oder DATE-Feld extrahiert werden. Durch den Vergleich der extrahierten Daten wird die chronologische Reihenfolge sichergestellt.
Zum Beispiel:
<code class="mysql">select date_format(date(starttime),'%d-%m-%Y') from data where date(starttime) >= date '2012-11-02';</code>
In dieser Abfrage extrahiert date(starttime) das Datum aus dem Startzeitfeld, mit dem dann verglichen wird das angegebene Datum im Format JJJJ-MM-TT. Die date_format-Funktion wird nur zum Formatieren des Ergebnisses verwendet.
Wenn starttime ein DATETIME-Feld ist, sollten Sie Folgendes verwenden:
<code class="mysql">select date_format(date(starttime),'%d-%m-%Y') from data where starttime >= '2012-11-02 00:00:00';</code>
Diese Abfrage vermeidet eine wiederholte Datumskonvertierung, da der Vergleich direkt am durchgeführt wird DATETIME-Feld.
Beachten Sie, dass der ISO-8601-Standard die Verwendung von „JJJJ-MM-TT“ als Datumsformat empfiehlt, der bereitgestellte Code sich jedoch an das vom Benutzer angegebene Format „%d-%m-%Y“ hält .
Das obige ist der detaillierte Inhalt vonWarum führt der MySQL-Datumsvergleich mit date_format zu unerwarteten Ergebnissen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!