ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

关于MySQL时间直接相减的问题

2022-06-08 15:33:49  阅读:185  来源: 互联网

标签:00 27 相减 05 55 01 关于 2022 MySQL


最近发现一个问题,在使用MySQL8.0新的延迟计算方式来计算主从延迟时,如果延迟过大,计算出的结果和原先Seconds_Behind_Master的差异特别大,一开始以为是写的SQL存在问题,校验了几次发现不对,是两个时间字段计算的结果异常导致,下面是具体的验证方式

-- 创建一张包含2个时间字段的表
create table t1(dt1 datetime,dt2 datetime)

-- 插入3条数据,三条数据分别为时间差小于1分钟/时间差等于1分钟/时间差大于1分钟
insert into t1 select '2022-05-27 00:00:55','2022-05-27 00:00:00';
insert into t1 select '2022-05-27 00:01:00','2022-05-27 00:00:00';
insert into t1 select '2022-05-27 00:01:05','2022-05-27 00:00:00';

-- 表中数据示例
+---------------------+---------------------+
| dt1                 | dt2                 |
+---------------------+---------------------+
| 2022-05-27 00:00:55 | 2022-05-27 00:00:00 |
| 2022-05-27 00:01:00 | 2022-05-27 00:00:00 |
| 2022-05-27 00:01:05 | 2022-05-27 00:00:00 |
+---------------------+---------------------+

-- 对数据做各种处理查看输出的结果
SELECT DT1 - DT2 "时间直接做减法",
       CONVERT(DT1, UNSIGNED INTEGER) - CONVERT(DT2, UNSIGNED INTEGER) "将时间转换为整数做减法",
       UNIX_TIMESTAMP(DT1) - UNIX_TIMESTAMP(DT2) "转换为时间戳做减法",
       TIME_TO_SEC(TIMEDIFF(DT1, DT2)) "用时间函数处理"
  FROM T1;

+----------------+------------------------+--------------------+----------------+
| 时间直接做减法    | 将时间转换为整数做减法    | 转换为时间戳做减法    | 用时间函数处理   |
+----------------+------------------------+--------------------+----------------+
|             55 |                     55 |                 55 |             55 |
|            100 |                    100 |                 60 |             60 |
|            105 |                    105 |                 65 |             65 |
+----------------+------------------------+--------------------+----------------+

可以看到,当小于一分钟时,时间相减不存在问题
当等于或大于一分钟时,实际上MySQL把时间类型转换为了整数型做计算

  • 00:01:00 变为了100
  • 00:01:05 变为了105

标签:00,27,相减,05,55,01,关于,2022,MySQL
来源: https://www.cnblogs.com/zhenxing/p/16355843.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有