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

MYSQL Dato Tid afrunding til nærmeste time

Opdatering:Jeg tror, ​​https://stackoverflow.com/a/21330407/480943 er et bedre svar.

Du kan gøre det med noget dato-aritmetik:

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

Forklaringer:

  • DATE_FORMAT :DATE_FORMAT(the_date, "%Y-%m-%d %H:00:00") returnerer datoen afkortet til nærmeste time (sætter minut- og sekunddelen til nul).

  • MINUT :MINUTE(the_date) får datoens minutværdi.

  • IF :Dette er en betinget; hvis værdien i parameter 1 er sand, returnerer den parameter 2, ellers returnerer den parameter 3. Så IF(MINUTE(the_date) < 30, 0, 1) betyder "Hvis minutværdien er mindre end 30, returner 0, ellers returner 1". Det er det, vi skal bruge til at runde af -- det er antallet af timer, der skal tilføjes igen.

  • DATE_ADD :Dette tilføjer antallet af timer for runden til resultatet.



  1. Sådan dokumenterer du en database

  2. Databasebelastningsbalancering:Distribuerede vs centraliserede opsætninger

  3. Oracle SQL - Sum og grupper data efter uge

  4. Sådan aktiverer du sporing i oracle apps r12