mysql - 将 MySQL 日期四舍五入到最接近的时间间隔,而不受夏令时更改的影响
问题描述
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'
我已经编写了上面的查询,它似乎工作正常。但是,通过这篇文章,第一个答案有一条评论,指出这种方法将失败的日期时间介于夏令时之间。我没有得到他指定的例子。对于我的情况,我在该线程上注意到的其他方法看起来更加复杂。我试图了解这将如何影响我的情况。任何建议/示例表示赞赏。或者,是否有更好的方法通过编写更简单的查询来避免这种情况?PS 我希望这适用于 MySQL 5.6、5.7 和 8.0。
解决方案
在 MySQL 数据库中解释了使用将 datetime 转换为 unixtime 并返回时可能遇到的问题。
所以为了安全起见,我会使用另一种方法:
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)));
这个想法非常相似:您将时间转换为秒,四舍五入并转换回来。
推荐阅读
- machine-learning - 如何使用`allennlp train`继续训练序列化的AllenNLP模型?
- database - ODI12c 中的数据库未处于打开状态 - 存储库创建实用程序
- typescript - 在 TypeScript 中是无效的。为什么我从 console.log 得到结果?
- r - 如何访问使用输入传递的传单地图?
- azure - 如何在 SPA Nuxt Web 应用程序的客户端访问 Azure 应用程序设置
- java - 在 MongoDB 中更新值加 1
- r-markdown - 在 RMarkdown 中编织时服务器意外关闭连接
- microsoft-graph-api - js Office插件试图获取文本输入字段以将变量传递给图形API调用
- python - 将 4 个十六进制字节转换为 RGBA 颜色
- python - 使用 seaborn 联合图返回 hexbin 中的值数组