将mysql日期舍入到最近的间隔,而不受夏时制更改的影响

yrdbyhpb  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(428)
SET @time := '2018-11-08 00:36:50.000000';
SET @intervalInMinutes := 15
SELECT FROM_UNIXTIME((Select FLOOR ((select UNIX_TIMESTAMP(@time) / (@intervalInMinutes* 60))) * (@intervalInMinutes*60)));

我需要在mysql中编写一个查询,转换用户指定的最近间隔类别中的日期/时间。示例:
例1:“2018-10-24 17:45:50.000000”
15分钟的时间间隔将转换为“2018-10-24 17:45:00”
30分钟的时间间隔将转换为“2018-10-24 17:30:00”
60分钟的时间间隔将转换为“2018-10-24 17:00:00”
例2:“2018-10-24 17:36:20.000000”;
15分钟的时间间隔将转换为“2018-10-24 17:30:00”
30分钟的时间间隔将转换为“2018-10-24 17:30:00”
60分钟的时间间隔将转换为“2018-10-24 17:00:00”
我已经写了上面的查询,似乎工作良好。然而,在这篇文章中,第一个答案有一个评论,指出这种方法将失败的日期时间之间的夏时制。我不明白他所说的例子。我注意到的其他方法对于我的案例来说更为复杂。我想知道这会对我的情况有什么影响。任何建议/例子都值得赞赏。或者,有没有更好的方法通过编写一个更简单的查询来避免这种情况?p、 我希望这是适用于MySQL5.6,5.7和8.0。

u2nhd7ah

u2nhd7ah1#

在使用将datetime转换为unixtime并返回时可能遇到的问题可以在mysql数据库中得到很好的解释。
为了安全起见,我会用另一种方法:

SET @time := '2018-11-08 00:36:50.000000';
SET @intervalInMinutes := 15;
SELECT TIMESTAMP(DATE(@time), SEC_TO_TIME(FLOOR(TIME_TO_SEC(TIME(@time)) / (@intervalInMinutes * 60)) * (@intervalInMinutes * 60)));

这个想法非常相似:你把时间转换成秒,四舍五入再转换回来。

相关问题