Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MYSQL Date Time Round para a hora mais próxima


Atualização:acho que https://stackoverflow.com/a/21330407/480943 é uma resposta melhor.

Você pode fazer isso com alguma aritmética de 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

Explicações:

  • DATE_FORMAT :DATE_FORMAT(the_date, "%Y-%m-%d %H:00:00") retorna a data truncada para a hora mais próxima (configura as partes de minuto e segundo para zero).

  • MINUTE :MINUTE(the_date) obtém o valor minuto da data.

  • SE :Esta é uma condicional; se o valor no parâmetro 1 for verdadeiro, ele retornará o parâmetro 2, caso contrário, retornará o parâmetro 3. Então IF(MINUTE(the_date) < 30, 0, 1) significa "Se o valor do minuto for menor que 30, retorne 0, caso contrário, retorne 1". Isso é o que vamos usar para arredondar -- é o número de horas para adicionar novamente.

  • DATE_ADD :Isso adiciona o número de horas da rodada ao resultado.