Актуализация:Мисля, че https://stackoverflow.com/a/21330407/480943 е по-добър отговор.
Можете да го направите с някаква аритметика за дата:
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
Обяснения:
-
DATE_FORMAT :
DATE_FORMAT(the_date, "%Y-%m-%d %H:00:00")
връща датата, съкратена до най-близкия час (настройва минутата и секундата на нула). -
MINUTE :
MINUTE(the_date)
получава минутната стойност на датата. -
IF :Това е условно; ако стойността в параметър 1 е вярна, тогава той връща параметър 2, в противен случай връща параметър 3. Така че
IF(MINUTE(the_date) < 30, 0, 1)
означава "Ако минутната стойност е по-малка от 30, върнете 0, в противен случай върнете 1". Това е, което ще използваме, за да закръглим – това е броят на часовете, които трябва да добавим. -
DATE_ADD :Това добавя броя на часовете за рунда към резултата.