Mysql – 秒差异意外结果
作者:互联网
我需要计算两个日期之间的秒数差异.由于它的limitations,我不能使用TIMEDIFF.
我用的时候:
SELECT UNIX_TIMESTAMP('2015-03-28 08:21:15') - UNIX_TIMESTAMP('2015-03-27 08:21:15');
它返回预期的86400秒(什么给出24小时)但是当我使用时:
SELECT UNIX_TIMESTAMP('2015-03-29 08:21:15') - UNIX_TIMESTAMP('2015-03-27 08:21:15');
它似乎不给86400 * 2而是169200而不是47小时.
问题是 – 为什么?这是一个错误或功能吗?有没有其他合理的方法来计算时差而不用担心时间限制?
解决方法:
有几种方法可以解决这个问题:
随着UNIX_TIMESTAMP()
:
在执行日期操作之前使用SET SESSION time_zone =’0:00′.
SET SESSION time_zone = '+0:00';
SELECT UNIX_TIMESTAMP('2015-03-29 08:21:15') - UNIX_TIMESTAMP('2015-03-27 08:21:15');
这返回172800,即48小时的适当时差.
Demo.
随着TIMESTAMPDIFF()
:
如果您不想使用SET SESSION time_zone,可以尝试TIMESTAMPDIFF()
SELECT UNIX_TIMESTAMP('2015-03-29 08:21:15') - UNIX_TIMESTAMP('2015-03-27 08:21:15');
SELECT TIMESTAMPDIFF(SECOND, '2015-03-27 08:21:15', '2015-03-29 08:21:15');
第一次计算结果为169200(即47小时),第二次计算结果为172800(即48小时).
请记住,应该先在TIMESTAMPDIFF()中使用较小的时间戳,否则会得到否定的结果.或者,您可以在ABS()
下包装TIMESTAMPDIFF(),如下所示:
SELECT ABS(TIMESTAMPDIFF(SECOND, '2015-03-29 08:21:15', '2015-03-27 08:21:15'));
标签:mysql,sql,mysql-8-0 来源: https://codeday.me/bug/20190622/1262181.html