24

MySQL の時間を最も近い 15 分 (0、15、30、45 など) に丸めるにはどうすればよいですか?

4

3 に答える 3

33
SELECT SEC_TO_TIME(FLOOR((TIME_TO_SEC(CURTIME())+450)/900)*900)

この例では、入力時間に CURTIME() を使用しましたが、任意の時間フィールドを使用できます。

900 秒 = 15 分 (丸める期間)、450 秒はその半分です (丸め要素を提供するため)。私は1800/900でテストして、最も近い30分を取得しました。他のものでも動作するはずです(10分間で600/300など)。

于 2013-10-08T10:02:48.663 に答える
21
SELECT FROM_UNIXTIME( ROUND(UNIX_TIMESTAMP(NOW()) / 900,0)*900);

これを一般化して、任意の時間値に丸めることができます。900 秒 = 15 分。900 を他の丸め係数に置き換えることができます。

于 2012-12-04T17:19:11.497 に答える
0

これは、私が望んでいたものに非常に近い結果を得た、私が使用した大まかなコードです。秒を使用しなかったので、中間点近くの分を選択しました。

SELECT
       CASE 
            WHEN minute(timeIn) BETWEEN 0 and 7 THEN SEC_TO_TIME((TIME_TO_SEC(timeIn) DIV 3600) * 3600)
            WHEN minute(timeIn) BETWEEN 8 and 22 THEN ADDTIME(SEC_TO_TIME((TIME_TO_SEC(timeIn) DIV 3600) * 3600), '00:15:00')
            WHEN minute(timeIn) BETWEEN 23 and 37 THEN ADDTIME(SEC_TO_TIME((TIME_TO_SEC(timeIn) DIV 3600) * 3600), '00:30:00')
            WHEN minute(timeIn) BETWEEN 38 and 52 THEN ADDTIME(SEC_TO_TIME((TIME_TO_SEC(timeIn) DIV 3600) * 3600), '00:45:00')
            WHEN minute(timeIn) BETWEEN 53 and 59 THEN ADDTIME(SEC_TO_TIME((TIME_TO_SEC(timeIn) DIV 3600) * 3600), '01:00:00')
       END as 15_min
    FROM
      clock.punches;
于 2012-12-04T17:12:42.063 に答える