Aktualizacja:myślę, że https://stackoverflow.com/a/21330407/480943 jest lepszą odpowiedzią.
Możesz to zrobić za pomocą arytmetyki dat:
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
Wyjaśnienia:
-
DATE_FORMAT :
DATE_FORMAT(the_date, "%Y-%m-%d %H:00:00")
zwraca datę skróconą do najbliższej godziny (ustawia minuty i sekundy na zero). -
MINUT :
MINUTE(the_date)
pobiera wartość minutową daty. -
JEŻELI :To jest warunek; jeśli wartość w parametrze 1 jest prawdziwa, zwraca parametr 2, w przeciwnym razie zwraca parametr 3. Zatem
IF(MINUTE(the_date) < 30, 0, 1)
oznacza „Jeśli wartość minut jest mniejsza niż 30, zwróć 0, w przeciwnym razie zwróć 1”. Właśnie tego użyjemy do zaokrąglenia — jest to liczba godzin, które należy ponownie dodać. -
DATE_ADD :Dodaje liczbę godzin rundy do wyniku.