sql >> Database >  >> RDS >> Mysql

MYSQL Datum Tijd Rond naar dichtstbijzijnde uur

Update:ik denk dat https://stackoverflow.com/a/21330407/480943 is een beter antwoord.

Je kunt het doen met een rekenkundige datum:

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

Uitleg:

  • DATE_FORMAT :DATE_FORMAT(the_date, "%Y-%m-%d %H:00:00") geeft de datum terug, afgekapt tot op het dichtstbijzijnde uur (zet de minuten en seconden op nul).

  • MINUUT :MINUTE(the_date) krijgt de minuutwaarde van de datum.

  • IF :Dit is een voorwaardelijk; als de waarde in parameter 1 waar is, wordt parameter 2 geretourneerd, anders wordt parameter 3 geretourneerd. Dus IF(MINUTE(the_date) < 30, 0, 1) betekent "Als de minuutwaarde kleiner is dan 30, retourneer 0, anders retourneer 1". Dit is wat we gaan gebruiken om af te ronden -- het is het aantal uren om weer op te tellen.

  • DATE_ADD :Dit voegt het aantal uren voor de ronde toe aan het resultaat.



  1. Getallen opmaken in MariaDB

  2. Hoe geef ik letterlijk de datum op bij het schrijven van SQL-query's vanuit SQL Server die is gekoppeld aan Oracle?

  3. UNIX_TIMESTAMP() Voorbeelden – MySQL

  4. Auditlogboekregistratie voor PostgreSQL