数据库
首页 > 数据库> > Mysql – 秒差异意外结果

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'));

Rextester link.

标签:mysql,sql,mysql-8-0
来源: https://codeday.me/bug/20190622/1262181.html