Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MYSQL-Datum Uhrzeit auf die nächste Stunde runden

Aktualisierung:Ich denke https://stackoverflow.com/a/21330407/480943 ist eine bessere Antwort.

Sie können es mit etwas Datumsarithmetik machen:

SELECT some_columns,
    DATE_ADD(
        DATE_FORMAT(the_date, "%Y-%m-%d %H:00:00"),
        INTERVAL IF(MINUTE(the_date) < 30, 0, 1) HOUR
    ) AS the_rounded_date
FROM your_table

Erläuterungen:

  • DATE_FORMAT :DATE_FORMAT(the_date, "%Y-%m-%d %H:00:00") gibt das auf die nächste Stunde verkürzte Datum zurück (setzt den Minuten- und Sekundenteil auf Null).

  • MINUTE :MINUTE(the_date) erhält den Minutenwert des Datums.

  • IF :Dies ist eine Bedingung; Wenn der Wert in Parameter 1 wahr ist, wird Parameter 2 zurückgegeben, andernfalls Parameter 3. Also IF(MINUTE(the_date) < 30, 0, 1) bedeutet "Wenn der Minutenwert kleiner als 30 ist, 0 zurückgeben, andernfalls 1 zurückgeben". Dies ist, was wir zum Runden verwenden werden – es ist die Anzahl der Stunden, die wieder hinzuaddiert werden.

  • DATE_ADD :Dies fügt die Anzahl der Stunden für die Runde zum Ergebnis hinzu.