我需要找到下一个(可被5整除的分数):从获得UTC当前时间的结果中得到00,让我解释一下......
我使用
SELECT UTC_TIMESTAMP()
MySql中的函数,它返回给我“2010-11-11 16:26:19”。
然后我想将此值转换为“2010-11-11 16:30:00”,最好只使用MySql,或MySql和PHP的组合。
干杯!
答案 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
你明白了。