为什么 mysql timediff 函数输出错误?

why does mysql timediff function give wrong output?

当我使用 timediff 函数时,

mysql 没有给出预期的输出。 mysql的版本是5.5

SELECT TIME_FORMAT(TIMEDIFF( '2018-06-18 08:20:00','2019-01-25 14:29:00'),'%H:%i:%s');

TIMEDIFF 不能超过 839 小时,因此,您将无法测量超过 ~35 天的更长范围内的差异。在这种情况下,您可以执行以下操作:

  • 使用TIMESTAMPDIFF获取秒数
  • 将秒转换为hh:m:ss

例如

SET @seconds := (SELECT TIMESTAMPDIFF(second, '2018-06-18 08:20:00','2019-01-25 14:29:00'));
SELECT CONCAT(FLOOR(@seconds/3600),':',FLOOR((@seconds%3600)/60),':',(@seconds%3600)%60) AS difference;

如果您想在同一个查询中执行这两项操作,则可以使用以下内容:

SELECT CONCAT(FLOOR(TIMESTAMPDIFF(second, '2018-06-18 08:20:00','2019-01-25 14:29:00')/3600),
':',FLOOR((TIMESTAMPDIFF(second, '2018-06-18 08:20:00','2019-01-25 14:29:00')%3600)/60),
':',(TIMESTAMPDIFF(second, '2018-06-18 08:20:00','2019-01-25 14:29:00')%3600)%60) 
AS difference;

这里是SQLFiddle1 and SQLFiddle2.

预期结果是:总时分秒,这就是你想要的:

SELECT 
CONCAT(
    TIMESTAMPDIFF(HOUR, '2018-06-18 08:20:00', '2019-01-25 14:29:00'), ":", 
    TIMESTAMPDIFF(minute, '2018-06-18 08:20:00', '2019-01-25 14:29:00'), ":",
    TIMESTAMPDIFF(SECOND, '2018-06-18 08:20:00', '2019-01-25 14:29:00'));

这将导致:

5310:318609:19116540

TIMEDIFF 和 TIME 有限制。
当两个 TIMESTAMP 之间的差异变大时,这会产生问题。

但是如果计算 TIMESTAMP 的 TIME 部分之间的 TIMEDIFF,那就没问题了。不管怎样,分秒必争。

可以通过 TIMESTAMPDIFF 计算 2 个时间戳之间的小时差。

因此下面的查询将时差 (f.e. '5310') 连接到有用的时差 (f.e. ':09:10')

示例片段:

SELECT 
CONCAT(TIMESTAMPDIFF(HOUR, ts1, ts2), RIGHT(TIMEDIFF(CAST(ts1 AS TIME), CAST(ts2 AS TIME)), 6)) as tm
FROM (
  SELECT TIMESTAMP('2018-06-18 08:20:00') ts1, TIMESTAMP('2019-01-25 14:29:10') ts2
  union all
  SELECT TIMESTAMP('2019-01-25 14:29:10') ts1, TIMESTAMP('2018-06-18 08:20:00') ts2
) q;

Returns

tm
-------------
5310:09:10 
-5310:09:10 

db<>fiddle here

的测试