登录
首页 >  数据库 >  MySQL

使用MYSQLTIMESTAMP字段进行时间加减运算问题

来源:脚本之家

时间:2023-02-25 10:37:51 145浏览 收藏

大家好,今天本人给大家带来文章《使用MYSQLTIMESTAMP字段进行时间加减运算问题》,文中内容主要涉及到时间、mysqltimestamp、加减运算,如果你对数据库方面的知识点感兴趣,那就请各位朋友继续看下去吧~希望能真正帮到你们,谢谢!

MYSQL TIMESTAMP字段进行时间加减运算

在数据分析过程中,想当然地对TIMESTAMP字段进行运算,导致结果谬之千里

计算公式如下

-- create_time与week_time的声明都是TIMESTAMP(), 要求精确到分钟 --
SELECT (sa.create_time - sa.week_time)/(1000 * 60)
from alarm_sla_1 sa

当然正确的解法是利用timestampdiff函数,如下:

SELECT timestampdiff(minute, sa.create_time, sa.week_time)
from alarm_sla_1 sa

但有意思的问题在于,MYSQL明明支持减法操作,为何操作的结果又大相径庭?

类似的问题还有,TIMESTAMP字段的时间精度是什么?

从MYSQL的官方实例中可以看到(请见后续的参考文档),TIMESTAMP字段的小数部分确定了秒的经度,3位小数精确到毫秒,6位小数精确到微秒,如下:

声明方式小数长度精度
TIMESTAMP(3)3毫秒
TIMESTAMP(6)6微秒

按照上面的推论,那么默认的声明TIMESTAMP应该精确到秒,那么应该相减的结果应该得到秒,测试语句如下:

SELECT sa.week_time - sa.create_time, timestampdiff(second, sa.create_time, sa.week_time)
from alarm_sla_1 sa

但最后的结果见下表:

相减结果函数结果
100001286412

显然,并不存在相关性,差异何止里计?

后来继续进行了指定经度的操作运算,结论依旧如此。

DATETIME 与 TIMESTAMP的区别

特性DATETIMETIMESTAMP
时间范围1000-01-01 00:00:00到9999-12-31 23:59:591970-01-01 00:00:01到2038-01-09 03:14:07
存储空间8+3(秒的精度)4+3(秒的精度)
格式转换不支持支持UTC
多时区支持不支持,固定时区不支持
创建索引不能
查询后缓存结果

结论

MYSQL中TIMESTAMP字段直接进行相减操作,可能得到难以理解的结果,请慎用。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持golang学习网。

参考文档

到这里,我们也就讲完了《使用MYSQLTIMESTAMP字段进行时间加减运算问题》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于mysql的知识点!

声明:本文转载于:脚本之家 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>