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.