2013-08-09 13 views
1

У меня проблема с использованием TIMEDIFF с двумя разными датами. Следующий запрос "должен" вернуться 00:04:51Отрицательное значение MySQL TIMEDIFF

mysql> SELECT TIMEDIFF(TIME('2013-07-21 00:04:50'),TIME('2013-07-20 23:59:59')); 
+-------------------------------------------------------------------+ 

|TIMEDIFF(TIME('2013-07-21 00:04:50'),TIME('2013-07-20 23:59:59')) | 

+-------------------------------------------------------------------+ 

| -23:55:09               | 

+-------------------------------------------------------------------+ 

1 row in set (0.00 sec) 

Любые советы? Это самый простой способ? Спасибо

ответ

1

Попробуйте это:

SELECT TIME(TIMEDIFF('2013-07-21 00:04:50','2013-07-20 23:59:59')); 
+-------------------------------------------------------------------+ 

|TIME(TIMEDIFF('2013-07-21 00:04:50','2013-07-20 23:59:59')) 
+0

'TIMEDIFF()' уже возвращает время. Обертка его в 'TIME()' ничего не делает. – JJJ

2

Это правильный результат, потому что вы даете свои даты только значениям времени (вы лишаетесь смысла части своих операндов). Если вы хотите включить влияние даты на результат, вы должны использовать функцию DATE_DIFF() или не снимать свои даты с помощью функции TIME().

3

Если нет информации о дате, тогда предполагается, что эти значения указаны в один день. Сохранить информацию о дате и он будет работать, как ожидалось *:

SELECT TIMEDIFF('2013-07-21 00:04:50','2013-07-20 23:59:59'); 

* При условии, что ответ меньше TIMES макс 838: 59: 59

2

Не конвертируйте свою отметку времени в использование времени, просто введите свои значения как

TIMEDIFF('2013-07-21 00:04:50','2013-07-20 23:59:59') 

.Проверить еще от функции Mysql MysqlDate Time Function

B/c Время будет извлекать только время с отметки времени. так что на самом деле вы делаете.

TIMEDIFF('00:04:50','23:59:59');