„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Warum liefert der MySQL-Datumsvergleich mit date_format unerwartete Ergebnisse?

Warum liefert der MySQL-Datumsvergleich mit date_format unerwartete Ergebnisse?

Veröffentlicht am 12.11.2024
Durchsuche:265

Why Is MySQL Date Comparison with date_format Yielding Unexpected Results?

Vergleich von MySQL-Daten mit date_format

Obwohl ein Benutzer mehrere Datumsvergleichsmethoden ausprobiert hat, ist ein unerwartetes Ergebnis aufgetreten. 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:

select date_format(date(starttime),'%d-%m-%Y') from data
where date(starttime) >= date '2012-11-02';

In dieser Abfrage extrahiert date(starttime) das Datum aus dem Startzeitfeld, das dann mit dem angegebenen Datum in JJJJ-MM verglichen wird -DD-Format. Die date_format-Funktion wird nur zum Formatieren des Ergebnisses verwendet.

Wenn starttime ein DATETIME-Feld ist, sollten Sie Folgendes verwenden:

select date_format(date(starttime),'%d-%m-%Y') from data
where starttime >= '2012-11-02 00:00:00';

Diese Abfrage vermeidet eine wiederholte Datumsumwandlung, da der Vergleich direkt im Feld DATETIME durchgeführt wird.

Denken Sie an die ISO -8601-Standard empfiehlt die Verwendung von „JJJJ-MM-TT“ als Datumsformat, der bereitgestellte Code entspricht jedoch dem vom Benutzer angegebenen Format „%d-%m-%Y“.

Freigabeerklärung Dieser Artikel wird unter folgender Adresse abgedruckt: 1729739525 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3