如何将时间缩短到最近的15分钟段

时间:2012-12-04 17:12:42

标签: mysql time rounding

如何在MySQL中将时间缩短到最接近的15分钟(例如0,15,30,45)?

3 个答案:

答案 0 :(得分:27)

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

在这个例子中,我使用CURTIME()作为输入时间,但你可以使用任何时间字段。

900秒= 15分钟(循环到的时间段),450秒是一半(提供舍入元素)。我已经用1800/900测试了最近的半小时,应该和其他人一起工作(600/300 10分钟等)。

答案 1 :(得分:18)

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

这可以推广到任何时间值。 900秒= 15分钟。您可以将900替换为任何其他舍入因子。

答案 2 :(得分: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;