Mise à jour :je pense https://stackoverflow.com/a/21330407/480943 est une meilleure réponse.
Vous pouvez le faire avec un peu d'arithmétique de date :
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
Explications :
-
DATE_FORMAT :
DATE_FORMAT(the_date, "%Y-%m-%d %H:00:00")
renvoie la date tronquée à l'heure la plus proche (met à zéro les parties minute et seconde). -
MINUTE :
MINUTE(the_date)
obtient la valeur en minutes de la date. -
SI :Il s'agit d'un conditionnel ; si la valeur du paramètre 1 est vraie, alors elle renvoie le paramètre 2, sinon elle renvoie le paramètre 3. Donc
IF(MINUTE(the_date) < 30, 0, 1)
signifie "Si la valeur des minutes est inférieure à 30, renvoie 0, sinon renvoie 1". C'est ce que nous allons utiliser pour arrondir -- c'est le nombre d'heures à rajouter. -
DATE_ADD :Cela ajoute le nombre d'heures pour le tour dans le résultat.