使用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(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字段直接进行相减操作,可能得到难以理解的结果,请慎用。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。
参考文档
相关推荐
-
mysql计算时间差函数
MySql计算两个日期的时间差函数TIMESTAMPDIFF用法: 语法: TIMESTAMPDIFF(interval,datetime_expr1,datetime_expr2) 说明: 返回日期或日期时间表达式datetime_expr1 和datetime_expr2the 之间的整数差.其结果的单位由interval 参数给出.interval 的法定值同TIMESTAMPADD()函数说明中所列出的相同. 复制代码 代码如下: SELECT TIMESTAMPDIFF(MONT
-
MySQL 日期时间加减的示例代码
目录 1.MySQL加减某个时间间隔 2.日期相减 最近在复习MySQL,正好看到了MySQL 日期时间,本文就给自己留个笔记,顺便分享给大家 now (); 当前具体的日期和时间 curdate (); 当前日期 curtime(); 当前时间 1.MySQL加减某个时间间隔 设置当前日期变量 set @dt = now(); //设置当前日期 select @dt; //查询变量值 加减某个时间间隔函数date_add()与date_sub() date_add('某个日期时间',inter
-
MySQL中时间函数操作大全
目录 1. 获取系统当前时间 1.1. 获取 YYYY-MM-DD HH:mm:ss 1.2. 获取 YYYY-MM-DD 1.3. 获取 HH:mm:ss 2. 时间加减间隔函数 2.1. DATETIME 类型的加减 2.2. DATE 类型的加减 3. 两个时间的相减 3.1. DATE 类型相减 3.2. TIMESTAMP 类型 附:时间差 datediff() 总结 1. 获取系统当前时间 MySQL 版本为 5.7,详细的时间函数可以参考 MySQL 官方文档 在这里 1.1. 获
-
mysql之TIMESTAMP(时间戳)用法详解
一.TIMESTAMP的变体 TIMESTAMP时间戳在创建的时候可以有多重不同的特性,如: 1.在创建新记录和修改现有记录的时候都对这个数据列刷新: TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 2.在创建新记录的时候把这个字段设置为当前时间,但以后修改时,不再刷新它: TIMESTAMP DEFAULT CURRENT_TIMESTAMP 3.在创建新记录的时候把这个字段设置为0,以后修改时刷新它: TIMES
-
使用MYSQL TIMESTAMP字段进行时间加减运算问题
目录 MYSQL TIMESTAMP字段进行时间加减运算 计算公式如下 DATETIME 与 TIMESTAMP的区别 结论 参考文档 MYSQL TIMESTAMP字段进行时间加减运算 在数据分析过程中,想当然地对TIMESTAMP字段进行运算,导致结果谬之千里 计算公式如下 -- create_time与week_time的声明都是TIMESTAMP(), 要求精确到分钟 -- SELECT (sa.create_time - sa.week_time)/(1000 * 60) from a
-
mysql timestamp字段规范使用详情
目录 1. 前言 2. mysql中的时间字段 2.1. 数据的存储方式 2.2. DATETIME和TIMESTMAP的区别 3. timestamp字段处理默认值和null值时的行为 3.1. 参数禁用 3.2. 参数启用 4. 总结 1. 前言 这个世界离不开时间,同样,数据库中也是如此,表中的每条记录除了数据模型的时间字段(如生日,生产日期,出发日期等),一般至少还有两个固定的时间字段:记录插入时间,记录更新时间. 然而,看似很简单时间字段,谁能想到会导致应用报错,引发血案: 个中缘由,
-
python 实现UTC时间加减的方法
如下所示: #!/usr/bin/env python # -*- coding:utf-8 -*- import datetime time_delta = datetime.timedelta(hours=-2) time_now = datetime.datetime.utcnow() invalid_time = str(time_now + time_delta)[:19] print invalid_time 以上这篇python 实现UTC时间加减的方法就是小编分享给大家的全部内容
-
java 实现当前时间加减30分钟的时间代码
如代码所示: SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date now = new Date(); System.out.println("当前时间:" + sdf.format(now)); 方法一: long time = 30*60*1000;//30分钟 Date afterDate = new Date(now .getTime() + time);//30分钟
-
PHP实现针对日期,月数,天数,周数,小时,分,秒等的加减运算示例【基于strtotime】
本文实例讲述了PHP实现针对日期,月数,天数,周数,小时,分,秒等的加减运算方法.分享给大家供大家参考,具体如下: 其实就是strtotime这个内置函数 //PHP 日期 加减 周 date("Y-m-d",strtotime("2013-11-12 +1 week")) //PHP 日期 加减 天数 date("Y-m-d",strtotime("2013-11-12 12:12:12 +1 day")) //PHP 日期
-
ThinkPHP自定义函数解决模板标签加减运算的方法
本文实例讲述了ThinkPHP自定义函数解决模板标签加减运算的方法.分享给大家供大家参考.具体如下: 实际项目中,我们经常需要标签变量加减运算的操作.但是,在ThinkPHP中,并不支持模板变量直接运算的操作. 幸运的是,它提供了自定义函数的方法,我们可以利用自定义函数解决: ThinkPHP模板自定义函数语法如下: 格式:{:function(-)} (参考官方帮助文档:http://thinkphp.cn/Manual/196) 利用这个,我们来试做加法和减法. 一.在ThinkPHP中定义
-
C语言实现大整数加减运算详解
前言 我们知道,在数学中,数值的大小是没有上限的,但是在计算机中,由于字长的限制,计算机所能表示的范围是有限的,当我们对比较小的数进行运算时,如:1234+5678,这样的数值并没有超出计算机的表示范围,所以可以运算.但是当我们在实际的应用中进行大量的数据处理时,会发现参与运算的数往往超过计算机的基本数据类型的表示范围,比如说,在天文学上,如果一个星球距离我们为100万光年,那么我们将其化简为公里,或者是米的时候,我们会发现这是一个很大的数.这样计算机将无法对其进行直接计算. 可能我们认为实际应
-
js实现文本框支持加减运算的方法
本文实例讲述了js实现文本框支持加减运算的方法.分享给大家供大家参考.具体如下: 这是一个网页表单效果,让表单内的文本框支持加减运算,不过你要按正确的运算式输入,要不然它没有那么智能哦,比如输入1+5,文本框旁边会显示计算结果,这要归功于JavaScript的功能. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/js-math-input-method-codes/ 具体代码如下: <!DOCTYPE html PUBLIC "-//W3
-
C语言中指针的加减运算方法示例
参考文章,值得一看 char arr[3]; printf("arr:\n%d\n%d\n%d\n", arr, arr + 1, arr + 2); char *parr[3]; printf("parr:\n%d\n%d\n%d\n", parr, parr + 1, parr + 2); 从结果可以看到,字符数组每个元素占1字节,字符指针数组每个占4字节. 再看一个例子: char a = 'a', b = 'b', c = 'c', d = 'd'; cha
随机推荐
- 使用Ruby编写脚本进行系统管理的教程
- 可以生成SLEEP.EXE的延时命令的bat文件
- Android获取手机屏幕宽高、状态栏高度以及字符串宽高信息的方法
- java验证码生成的基本流程
- perl pop push shift unshift实例介绍
- Centos7下搭建KVM虚拟机的方法
- js图片滚动效果时间可随意设定当鼠标移上去时停止
- ThinkPHP中自定义目录结构的设置方法
- 分享一道关于闭包、bind和this的面试题
- RedHat6.5安装MySQL5.7教程详解
- Flex中实现对一个text渲染不同的字体颜色示例
- C/S和B/S两种架构区别与优缺点分析
- JavaScript的事件代理和委托实例分析
- AJAX FCKEditor Rich Editor整合篇第1/2页
- C#使用DES和AES实现加密解密功能示例
- js style动态设置table高度
- iis resin 配置 安全简单设置.
- Apache日志的一些操作命令技巧
- Apache防DDOS模块mod_evasive安装和配置方法详解
- vc中使用SendMessage自定义消息函数