2017-05-17 5 views
0

나는 다음과 같은 쿼리가 :는 MySQL의 20에서 하나 잘못 timediff를 줄 권리

SELECT `Time`, 
    `Resolution`, 
    HOUR(TIMEDIFF(`Resolution`,`Time`)), 
    TIMEDIFF(`Resolution`,`Time`), 
    datediff(`Resolution`,`Time`) 
FROM Cases; 

디버깅하기 위해, 나는 결과가 다른 경우 바로보고, 전에 시간없이 TIMEDIFF를 추가합니다. 나는 더블 체크를하기 위해 datediff를 사용한다.

쿼리의 결과는 다음과 같습니다 사실

+---------------------+---------------------+-------------------------------------+-------------------------------+-------------------------------+ 
| Time    | Resolution   | HOUR(TIMEDIFF(`Resolution`,`Time`)) | TIMEDIFF(`Resolution`,`Time`) | datediff(`Resolution`,`Time`) | 
+---------------------+---------------------+-------------------------------------+-------------------------------+-------------------------------+ 
| 2017-01-10 13:35:00 | 2017-01-24 10:52:00 |         333 | 333:17:00      |       14 | 
| 2017-01-12 15:53:00 | 2017-02-21 16:06:00 |         838 | 838:59:59      |       40 | 
| 2017-01-18 09:19:00 | 2017-01-18 13:39:00 |         4 | 04:20:00      |        0 | 
| 2017-01-23 09:00:00 | 2017-01-23 15:08:00 |         6 | 06:08:00      |        0 | 
| 2017-01-24 08:49:00 | 2017-02-20 14:34:00 |         653 | 653:45:00      |       27 | 

, 더 라인을 제공하지만, 해당 줄은이 결과 - 838시간, 34.91 일 번역,의 35 말을 할 수 있지만, DATEDIFF 40 점을주고 계산을하면 40 일입니다! 012 월 2 일부터 12 월 21 일까지

기타 21 개 결과는 모두 맞습니다.

왜 그런가? mysql의 버그? 모든 답변을 매우 높이 평가합니다.

답변

2

사용

TIMESTAMPDIFF(HOUR,`Time`, `Resolution`) 

대신.

또한 HOUR()을 사용할 필요가 없습니다.

https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_timestampdiff

TIMEDIFF() 의해 반환 된 결과는 TIME 값이 허용되는 범위로 제한된다.

TIME의 값은 -838:59:59에서 838:59:59까지입니다. https://dev.mysql.com/doc/refman/5.5/en/time.html

가능한 최대 값을 얻었습니다.

+0

정말 고마워요. 도움이되었습니다. – Slarti42

+0

문제가 해결 되었다면 체크 표시를 클릭하여 답변을 수락하십시오 :) – inarilo

+0

done, thanks again. – Slarti42