当我使用timediff函数时,mysql没有给出预期的输出。 mysql的版本是5.5
pip
答案 0 :(得分:1)
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 和 SQLFiddle2 。
答案 1 :(得分:1)
TIMEDIFF和TIME有限制。
当两个TIMESTAMP之间的差异变大时,这会带来问题。
但是,如果人们计算出TIMESTAMP的TIME部分之间的TIMEDIFF,那很好。无论如何,分钟和秒。
可以通过TIMESTAMPDIFF计算两个时间戳之间的小时差。
因此,下面的查询将时差(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;
返回
tm
-------------
5310:09:10
-5310:09:10
对 db <>小提琴here
的测试答案 2 :(得分:0)
预期结果是:总时分分钟秒,这就是您想要的:
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