Mysql-秒差意外结果
我需要计算两次约会之间的秒差。我不能使用TIMEDIFF,因为它是 当我使用:Mysql-秒差意外结果,mysql,sql,mysql-8.0,Mysql,Sql,Mysql 8.0,我需要计算两次约会之间的秒差。我不能使用TIMEDIFF,因为它是 当我使用: SELECT UNIX_TIMESTAMP('2015-03-28 08:21:15') - UNIX_TIMESTAMP('2015-03-27 08:21:15'); SELECT UNIX_TIMESTAMP('2015-03-29 08:21:15') - UNIX_TIMESTAMP('2015-03-27 08:21:15'); 它返回预期的86400秒(即24小时),但当我使用: SELECT UN
SELECT UNIX_TIMESTAMP('2015-03-28 08:21:15') - UNIX_TIMESTAMP('2015-03-27 08:21:15');
SELECT UNIX_TIMESTAMP('2015-03-29 08:21:15') - UNIX_TIMESTAMP('2015-03-27 08:21:15');
它返回预期的86400秒(即24小时),但当我使用:
SELECT UNIX_TIMESTAMP('2015-03-28 08:21:15') - UNIX_TIMESTAMP('2015-03-27 08:21:15');
SELECT UNIX_TIMESTAMP('2015-03-29 08:21:15') - UNIX_TIMESTAMP('2015-03-27 08:21:15');
它似乎没有给出86400*2,而是169200,而给出47小时
问题是——为什么会这样?它是一个bug还是一个特性?有没有其他合理的方法来计算时差而不用担心时间限制?看起来2015年3月29日出现了日光变化,这可能是原因
有几种方法可以解决此问题: 与: 在执行日期操作之前,请使用
设置会话时区='+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小时的适当时差
.
与:
如果您不想使用设置会话时区
,可以尝试TIMESTAMPDIFF()
第一次计算结果为169200
(即47小时
),第二次计算结果为172800
(即48小时
)
请记住,在TIMESTAMPDIFF()
中应首先使用较小的时间戳,否则会得到负面结果。或者,您可以将TIMESTAMPDIFF()
包装在下面,如下所示:
从您的链接中,我不清楚您所说的限制是什么。同时选择TIMEDIFF('2015-03-29 08:21:15','2015-03-27 08:21:15')
给出48:00:00
。此外,你手动尝试发明一种时差算法的想法听起来像是一个关于YMMV的糟糕想法。@Michhawiedenmann这些日期只是一个样本。我有更长的周期。令人惊讶的是,在我的机器上,它输出172800,相当于86400*2。操作系统:Windows XP,MySQL 5.5.25a.UNIX_时间戳是特定于时区的。如果结合阅读,这个答案是有意义的。如果我们要查看单个值,UNIX\u TIMESTAMP
转换2015-03-28 08:21:15
返回1427527275
和2015-03-29 08:21:15
返回1427610075
。82800
的差异,转化为23
小时。@MarcinNabiałek,只是为了测试上面链接的问题中给出的一个答案:。当然,这是基于一个假设,即夏令时不需要考虑。谢谢。是的,这确实是夏令时的问题。但是没有它怎么可能计算呢@DhruvSaxena知道如何计算它而不进入TIMEDIFF
的838:59:59
限制吗?@MarcinNabiałek,只是好奇timestaff()
是否有帮助?谢谢。对不起,我以前没有回答,但没有时间看TIMESTAMPDIFF
完成了这项工作。谢谢@MarcinNabiałek!很高兴听到这个消息:)