2013-03-16 72 views
0

此方法必须返回1440分钟和工作正常:MySQL timediff - 它是一个错误吗?

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)) ; 

这是一个错误?

+3

不,它[不](http://sqlfiddle.com/#!2/0da0e/2)。顺便说一下,这是'天'而不是'年'。 – hjpotter92 2013-03-16 02:20:41

+0

您还有其他一些问题,如@DreamEater – jurgenreza 2013-03-16 02:24:35

+0

提到的那样工作正常,如果您选择组件表达式,您会得到什么值: 'SELECT ABS(ROUND((TIME_TO_SEC(TIMEDIFF('2013-03-10 10:00' '(2013-03-14'))/ 60,2))ardtd,ROUND((TIME_TO_SEC('2013-03-10 10:00''2013-03-14'))/ 60,2)AS rdtd (TIMEDF('2013-03-10 10:00''2013-03-14'))/ 60 14'))AS td,TIMEDIFF('2013-03-10 10:00''2013-03-14')AS d;'? – 2013-03-16 02:35:10

回答

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的检索并在显示TIME值 'HH:MM:SS' 格式(或 'HHH:MM:SS' 的大小时的值格式)。 TIME值的范围可以从 '-838:59:59'到'838:59:59'。

显然,您应该使用的功能TIMESTAMPDIFF()和UNIX_TIMESTAMP(),这两个返回整数中的一个,或使用DATEDIFF(),如果你有实际日期。