mysql-seconds差异意外结果

rslzwgfq  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(254)

我需要计算两次约会之间的秒差。我不能使用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小时。
问题是-为什么?它是一个bug还是一个特性?有没有其他合理的方法来计算时差而不用担心时间限制?

46scxncf

46scxncf1#

有几种方法可以解决这个问题:

使用unix\u 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 hours .
演示。

使用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 hours` )第二场演出 `172800` (即。 `48 hours` ). 
但是请记住,应该首先使用较小的时间戳 `TIMESTAMPDIFF()` 否则你会得到一个否定的结果。或者,你可以 Package  `TIMESTAMPDIFF()` 低于 `ABS()` 因此:

SELECT ABS(TIMESTAMPDIFF(SECOND, '2015-03-29 08:21:15', '2015-03-27 08:21:15'));

测试仪连接。
zf9nrax1

zf9nrax12#

看起来2015年3月29日有日光变化,这可能是2015年夏令时的原因

相关问题