1.datetime时间类型的加减计算
刷题过程中需要对两个datetime类型的数值求秒数差值,我就直接相减了:
select
tag,
start_time,
end_time,
duration,
end_time - start_time
from tb_user_video_log vl inner join tb_video_info vi on vl.video_id = vi.video_id;
出来的结果:
明显的能看到最后一个数据4100有问题,百度了一下结合官方文档,原来是datetime类型在做加减计算时时是直接拼接成整数按拼接后的整数做加减,比如最后一条数据相当于是
20211001110005
- 20211001105905
_______________
= 4100
解决的办法可以使用官方提供的函数TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)
,返回参数2减参数1的差值,结果以unit为单位,上面sql中end_time - start_time
改写成TIMESTAMPDIFF(SECOND,start_time,end_time)
。
也可以通过TIME_TO_SEC(time)
函数先将时间转换成秒再加减计算,也就是改成TIME_TO_SEC(end_time) - TIME_TO_SEC(start_time)
也是同样的效果。
mysql内置函数用法可以在https://dev.mysql.com/doc/refman/8.0/en/built-in-function-reference.html中ctrl+f查看。