Mysql
 sql >> Database >  >> RDS >> Mysql

Data e ora di MySQL intorno all'ora più vicina

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.