Cập nhật:Tôi nghĩ https://stackoverflow.com/a/21330407/480943 là một câu trả lời tốt hơn.
Bạn có thể làm điều đó với một số ngày tháng:
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
Giải thích:
-
DATE_FORMAT :
DATE_FORMAT(the_date, "%Y-%m-%d %H:00:00")
trả về ngày bị cắt ngắn thành giờ gần nhất (đặt phần phút và phần giây thành 0). -
PHÚT :
MINUTE(the_date)
nhận giá trị phút của ngày. -
NẾU :Đây là một điều kiện; nếu giá trị trong tham số 1 là true, thì nó trả về tham số 2, ngược lại nó trả về tham số 3. Vì vậy,
IF(MINUTE(the_date) < 30, 0, 1)
có nghĩa là "Nếu giá trị phút nhỏ hơn 30 thì trả về 0, ngược lại thì trả về 1". Đây là những gì chúng tôi sẽ sử dụng để làm tròn - đó là số giờ để cộng lại. -
DATE_ADD :Điều này thêm số giờ cho vòng vào kết quả.