Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql-秒差意外结果_Mysql_Sql_Mysql 8.0 - Fatal编程技术网

Mysql-秒差意外结果

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

我需要计算两次约会之间的秒差。我不能使用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 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!很高兴听到这个消息:)