2013-03-16 4 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

+0

У вас есть еще одна проблема, это прекрасно работает, как упоминалось в @DreamEater – jurgenreza

+0

Какие значения вы получите, если вы выберете выражения компонентов: 'SELECT ABS (ROUND ((TIME_TO_SEC (TIMEDIFF ('2013-03-10 10:00' «2013-03-14»))/60,2)) ardtd, ROUND ((TIME_TO_SEC (TIMEDIFF ('2013-03-10 10:00' '2013-03-14'))/60,2) AS rdtd , (TIME_TO_SEC (TIMEDIFF ('2013-03-10 10:00' '2013-03-14'))/60 AS dtd, TIME_TO_SEC (TIMEDIFF ('2013-03-10 10:00' '2013-03- 14 ')) AS td, TIMEDIFF (' 2013-03-10 10:00 '' 2013-03-14 ') AS d; '? –

ответ

1

Это должно вернуть 1440 минут и работает отлично:

No. Там может быть летнее изменение или второе изменение прыжок. Вы не можете зависеть от того, что два раза компенсируются определенной суммой только потому, что вы думаете, что они должны быть.

Было что-то странное.

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

Который не представляется возможным. Объяснение заключается в том, что значения TIME в MySQL have a limit по допустимым значениям.

MySQL извлекает и отображает значения TIME в формате HH: SS: ММ 'Формат (или 'HHH: MM: SS' формат для больших значений часов). Значения TIME могут находиться в диапазоне от '-838: 59: 59' до '838: 59: 59'.

Видимо, вы должны либо использовать одну из функций TIMESTAMPDIFF() и UNIX_TIMESTAMP(), оба из которых возвращать целые числа, или использовать DATEDIFF(), если у вас есть фактические даты.

Смежные вопросы