Opdatering:Jeg tror, https://stackoverflow.com/a/21330407/480943 er et bedre svar.
Du kan gøre det med noget dato-aritmetik:
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
Forklaringer:
-
DATE_FORMAT :
DATE_FORMAT(the_date, "%Y-%m-%d %H:00:00")
returnerer datoen afkortet til nærmeste time (sætter minut- og sekunddelen til nul). -
MINUT :
MINUTE(the_date)
får datoens minutværdi. -
IF :Dette er en betinget; hvis værdien i parameter 1 er sand, returnerer den parameter 2, ellers returnerer den parameter 3. Så
IF(MINUTE(the_date) < 30, 0, 1)
betyder "Hvis minutværdien er mindre end 30, returner 0, ellers returner 1". Det er det, vi skal bruge til at runde af -- det er antallet af timer, der skal tilføjes igen. -
DATE_ADD :Dette tilføjer antallet af timer for runden til resultatet.