Update:ik denk dat https://stackoverflow.com/a/21330407/480943 is een beter antwoord.
Je kunt het doen met een rekenkundige datum:
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
Uitleg:
-
DATE_FORMAT :
DATE_FORMAT(the_date, "%Y-%m-%d %H:00:00")
geeft de datum terug, afgekapt tot op het dichtstbijzijnde uur (zet de minuten en seconden op nul). -
MINUUT :
MINUTE(the_date)
krijgt de minuutwaarde van de datum. -
IF :Dit is een voorwaardelijk; als de waarde in parameter 1 waar is, wordt parameter 2 geretourneerd, anders wordt parameter 3 geretourneerd. Dus
IF(MINUTE(the_date) < 30, 0, 1)
betekent "Als de minuutwaarde kleiner is dan 30, retourneer 0, anders retourneer 1". Dit is wat we gaan gebruiken om af te ronden -- het is het aantal uren om weer op te tellen. -
DATE_ADD :Dit voegt het aantal uren voor de ronde toe aan het resultaat.