文章详情页
使用MYSQL TIMESTAMP字段进行时间加减运算问题
目录
- MYSQL TIMESTAMP字段进行时间加减运算
- 计算公式如下
- DATETIME 与 TIMESTAMP的区别
- 结论
- 参考文档
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应该精确到秒,那么应该相减的结果应该得到秒,测试语句如下:
SELECT sa.week_time - sa.create_time, timestampdiff(second, sa.create_time, sa.week_time) from alarm_sla_1 sa
但最后的结果见下表:
显然,并不存在相关性,差异何止里计?
后来继续进行了指定经度的操作运算,结论依旧如此。
DATETIME 与 TIMESTAMP的区别
结论
MYSQL中TIMESTAMP字段直接进行相减操作,可能得到难以理解的结果,请慎用。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
参考文档
- 日期与时间函数
- 秒的精度说明
标签:
MySQL
排行榜