MySQL timediff - 这是一个bug吗?

时间:2013-03-16 02:08:47

标签: mysql date datediff

这必须返回1440分钟并且工作正常:

select abs(round((TIME_TO_SEC(TIMEDIFF('2013-03-13 10:00', 
                                       '2013-03-14 10:00'))/60),2)) ;

(2)相同的功能日期更改为2 天返回 50339.98

select abs(round((TIME_TO_SEC(TIMEDIFF('2013-03-12 10:00', 
                                       '2013-03-14 10:00'))/60),2)) ;  

(3)相同的功能,日期变为4 天,答案是 50339.98

select abs(round((TIME_TO_SEC(TIMEDIFF('2013-03-10 10:00', 
                                       '2013-03-14 10:00'))/60),2)) ; 

这是一个错误吗?

1 个答案:

答案 0 :(得分:1)

  

这必须返回1440分钟并且工作正常:

没有。可能会有夏令时变化或闰秒变化。你不能仅仅因为你认为它们应该是两次偏移一定数量。

有些东西很奇怪。

select  
    TIMEDIFF('2000-09-14 09:00', '2000-08-10 10:00'),
    TIMESTAMPDIFF(SECOND, '2000-09-14 09:00', '2000-08-10 10:00');

给出

838:59:59,-3020400

这是不可能的。解释是MySQL have a limit中的TIME值取决于可接受的值。

  

MySQL以'HH:MM:SS'格式检索并显示TIME值(或   'HHH:MM:SS'格式表示大小时值)。 TIME值的范围可以从   '-838:59:59'到'838:59:59'。

显然你应该使用其中一个函数TIMESTAMPDIFF()和UNIX_TIMESTAMP(),它们都返回整数,或者如果你有实际日期则使用DATEDIFF()。