Aktualizace:Myslím, že https://stackoverflow.com/a/21330407/480943 je lepší odpověď.
Můžete to udělat pomocí nějaké aritmetiky 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
Vysvětlivky:
-
DATE_FORMAT :
DATE_FORMAT(the_date, "%Y-%m-%d %H:00:00")
vrátí datum zkrácené na nejbližší hodinu (nastaví minuty a sekundy na nulu). -
MINUTA :
MINUTE(the_date)
získá minutovou hodnotu data. -
IF :Toto je podmíněné; pokud je hodnota v parametru 1 pravdivá, pak vrátí parametr 2, jinak vrátí parametr 3. Takže
IF(MINUTE(the_date) < 30, 0, 1)
znamená "Pokud je hodnota minut menší než 30, vraťte 0, jinak vraťte 1". To je to, co použijeme k zaokrouhlení - je to počet hodin, které se mají přidat. -
DATE_ADD :Tím se do výsledku přidá počet hodin pro dané kolo.