将mysql utc_timestamp向下舍入到下一个五分钟的块

时间:2010-11-11 16:28:52

标签: mysql datetime timestamp

我需要找到下一个(可被5整除的分数):从获得UTC当前时间的结果中得到00,让我解释一下......

我使用

SELECT UTC_TIMESTAMP()

MySql中的函数,它返回给我“2010-11-11 16:26:19”。

然后我想将此值转换为“2010-11-11 16:30:00”,最好只使用MySql,或MySql和PHP的组合。

干杯!

3 个答案:

答案 0 :(得分:3)

编辑:我不是MySQL用户......我会留下必需品,而somone可能会做更多的事情。

SELECT UTC_TIMESTAMP() + 300 - UNIX_TIMESTAMP() % 300;

编辑:我刚刚重写了以上内容以便在MySQL中工作:

SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(UTC_TIMESTAMP()) 
+ 300 - (UNIX_TIMESTAMP(UTC_TIMESTAMP()) % 300));

我认为这不是OP想要的,因为当时间完全被5分钟整除时,它也会向上舍入5分钟。例如,14:45:00将四舍五入到14:50:00,这是错误的。但这是朝着正确方向迈出的一步。

答案 1 :(得分:3)

MsSQL:
DATEADD(second, (60 - DATEPART(second, Last_Updated)) + ((5 - (DATEPART(minute, Last_Updated) % 5)) * 60) - 60, Last_Updated)
MySQL:
SELECT DATE_ADD(UTC_TIMESTAMP(), INTERVAL ((60 - SECOND(UTC_TIMESTAMP())) + ((5 - (MINUTE(UTC_TIMESTAMP()) % 5)) * 60) - 60) SECOND);

将“Last_Updated”替换为您要转换的值,但会在5:00到下一个5分钟间隔内找到任何内容。

2010-10-26 18:04:07.000 2010-10-26 18:05:00.000
2010-11-10 17:18:59.000 2010-11-10 17:20:00.000
2010-11-10 20:59:27.000 2010-11-10 21:00:00.000
2010-11-10 20:59:46.000 2010-11-10 21:00:00.000
2010-11-11 12:00:51.000 2010-11-11 12:05:00.000
2010-11-11 12:30:59.000 2010-11-11 12:35:00.000

这些是我在最后对数据库进行测试的结果。

编辑忘记包含MySQL版本,oops。还保留了MsSQL版本,其他任何人都很好奇。

答案 2 :(得分:2)

我会将UNIX_TIMESTAMP()和FROM_UNIXTIME()与ROUND()结合使用。

最近的5分钟边界将是:

select now(),from_unixtime(300 * round(unix_timestamp(now())/300));

+---------------------+-------------------------------------------------------+
| now()               | from_unixtime(300 * round(unix_timestamp(now())/300)) |
+---------------------+-------------------------------------------------------+
| 2011-04-23 09:20:35 | 2011-04-23 09:20:00                                   | 
+---------------------+-------------------------------------------------------+

使用unix时间,你可以在几秒钟内完成工作。最近10秒你除以10,然后再乘以10。

最近一分钟 - 使用60 最近一小时 - 使用3600

你明白了。