关于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