Aggiornamento:penso https://stackoverflow.com/a/21330407/480943 è una risposta migliore.
Puoi farlo con un po' di calcolo della data:
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
Spiegazioni:
-
DATE_FORMAT :
DATE_FORMAT(the_date, "%Y-%m-%d %H:00:00")
restituisce la data troncata all'ora più vicina (imposta a zero le parti dei minuti e dei secondi). -
MINUTO :
MINUTE(the_date)
ottiene il valore minuto della data. -
SE :Questo è un condizionale; se il valore nel parametro 1 è true, restituisce il parametro 2, altrimenti restituisce il parametro 3. Quindi
IF(MINUTE(the_date) < 30, 0, 1)
significa "Se il valore dei minuti è inferiore a 30, restituisci 0, altrimenti restituisci 1". Questo è ciò che useremo per arrotondare:è il numero di ore da aggiungere di nuovo. -
DATE_ADD :Questo aggiunge il numero di ore per il round al risultato.