使用MYSQL TIMESTAMP字段进行时间加减运算问题
作者:蚁方阵 发布时间:2024-01-13 12:24:29
标签:MYSQL,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(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
但最后的结果见下表:
相减结果 | 函数结果 |
---|---|
1000012 | 86412 |
显然,并不存在相关性,差异何止里计?
后来继续进行了指定经度的操作运算,结论依旧如此。
DATETIME 与 TIMESTAMP的区别
特性 | DATETIME | TIMESTAMP |
---|---|---|
时间范围 | 1000-01-01 00:00:00到9999-12-31 23:59:59 | 1970-01-01 00:00:01到2038-01-09 03:14:07 |
存储空间 | 8+3(秒的精度) | 4+3(秒的精度) |
格式转换 | 不支持 | 支持UTC |
多时区支持 | 不支持,固定时区 | 不支持 |
创建索引 | 不能 | 能 |
查询后缓存结果 | 否 | 是 |
结论
MYSQL中TIMESTAMP字段直接进行相减操作,可能得到难以理解的结果,请慎用。
参考文档
日期与时间函数
秒的精度说明
来源:https://blog.csdn.net/yiifaa/article/details/78611079


猜你喜欢
- 本文实例讲述了python通过定义一个类实例作为ftp回调方法。分享给大家供大家参考。具体实现方法如下:class Writer: &nbs
- 本文实例讲述了Python列表元素常见操作。分享给大家供大家参考,具体如下:列表类似于java中的数组,用方括号表示,逗号分隔其中的元素#赋
- 前言最近这两天在看自己之前写的代码,所以正好把用过的东西整理一下,单例模式,在日常的代码工作中也是经常被用到,所以这里把之前用过的不同方式实
- 后边要做一个微信小程序,并要能获取用户微信绑定的手机号码。而小程序开发文档上边提供的获取手机号码的接口(getPhoneNumber())返
- 前言MySQL性能优化是一个老生常谈的问题,无论是在实际工作中还是面试中,都不可避免遇到相应的场景,下面博主就总结一些能够帮助大家解决这个问
- ASP 本身不支持动态包含文件,现在的动态包含是通过 FSO 把被包含的文件合并到主文件里再运行。以下也有把形如 <!--#
- 数组:复制传递(不要按照c/c++的方式去理解,c/c++中数组是引用传递),定长切片:引用传递,底层实现是3个字段 array(数组) +
- 不敢说得太明显太仔细,反正你懂的。有两种方法,一种是搭建本地授权服务器,另一种是直接替换核心文件,修改对应的注册码。先说第一种。 下载Int
- 基于web的技术中,分页是一个老的不能再老的,但大家津津乐道的问题,随着xml技术的日渐应用,把xml应用到分页当中,也是一种可能,当然网上
- 抽象方法和抽象类 在OOP 语言中,一个类可以有一个或多个子类,而每个类都有至少一个公有方法做为 外部代码访问其的接口。而抽象方法就是为了方
- EXPLAIN 是 MySQL 提供的一种工具,用于分析查询语句的执行计划,即查询优化器是如何决定执行查询语句的。EXPLAIN可以帮助我们
- 现在vue.js几乎是程序员必会的前端框架啦~今天就学习记录一下怎么运行一个vue项目无论是Idea还是webstorm,都是一样的操作。去
- Fiddler的手机抓包过程1、启动Fiddler打开菜单栏中的 Tools > Fiddler Options,打开“Fiddler
- 前言因为项目需要,需要批处理很多Matlab的.m文件,从每个文件中提取结果合并到一个文件中。 很明显,如果手工统计,几百个文件会累死的。
- 特征选择时困难耗时的,也需要对需求的理解和专业知识的掌握。在机器学习的应用开发中,最基础的是特征工程。——吴恩达1.数据预处理数据预处理需要
- 将字符串字段转为数字排序或比大小mysql里面有个坑就是,有时按照某个字段的大小排序(或是比大小)发现排序有点错乱。后来才发现,是我们想当然
- Oracle数据库查看一个进程是如何执行相关的实际SQL语句SELECT b.sql_text, sid, serial#, osuser,
- 异常的捕获与处理什么是错误简而言之:还没运行,在语法解析的时候,就发现语法存在问题,这个时候就是错误。什么是异常简而言之:代码写好之后,无明
- 现在,我们已经把一个Web App的框架完全搭建好了,从后端的API到前端的MVVM,流程已经跑通了。在继续工作前,注意到每次修改Pytho
- 如下所示:<code class="language-python">import numpy as np