Как округлить время до ближайшего 15-минутного сегмента
Как я могу округлять время в MySQL до ближайших 15 минут (например, 0,15,30,45)?
Ответы
Ответ 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;