Подтвердить что ты не робот

Как округлить время до ближайшего 15-минутного сегмента

Как я могу округлять время в MySQL до ближайших 15 минут (например, 0,15,30,45)?

4b9b3361

Ответ 1

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

В этом примере я использовал CURTIME() для времени ввода, но вы можете использовать любое поле времени.

900 секунд = 15 минут (период округления до), 450 секунд - половина этого (чтобы обеспечить элемент округления). Я тестировал с 1800/900, чтобы получить ближайшие полчаса, должен работать с другими (600/300 в течение 10 минут и т.д.).

Ответ 2

SELECT FROM_UNIXTIME( TRUNCATE(UNIX_TIMESTAMP(NOW()) / 900,0)*900);

Это может быть обобщено на округление до любого значения времени. 900 секунд = 15 минут. Вы можете заменить 900 на любой другой коэффициент округления.

Ответ 3

Вот какой-то грубый код, который я использовал, который получил результаты, действительно близкие к тому, что я хотел. Поскольку я не использовал секунды, я просто выбрал минуты около половины пути.

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;