Mysql
 sql >> Base de données >  >> RDS >> Mysql

MYSQL Date Heure Arrondi à l'heure la plus proche

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.