更新: 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の値がtrueの場合は、パラメータ2を返し、それ以外の場合は、パラメータ3を返します。したがって、
IF(MINUTE(the_date) < 30, 0, 1)
「分の値が30未満の場合は、0を返し、それ以外の場合は1を返します」を意味します。これは、丸めに使用するものです。これは、追加し直す時間数です。 -
DATE_ADD :これにより、ラウンドの時間数が結果に追加されます。