如何将 MySQL 中的时间四舍五入到最接近的 15 分钟(例如 0、15、30、45)?
问问题
13387 次
3 回答
33
SELECT SEC_TO_TIME(FLOOR((TIME_TO_SEC(CURTIME())+450)/900)*900)
在此示例中,我使用 CURTIME() 作为输入时间,但您可以使用任何时间字段。
900 秒=15 分钟(四舍五入的时间),450 秒是它的一半(提供四舍五入元素)。我已经用 1800/900 进行了测试以获得最近的半小时,应该与其他人一起工作(600/300 持续 10 分钟等)。
于 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 回答