MySQL에서 TIME 필드가 표현할 수 있는 범위는 '-838:59:59'부터 '838:59:59'까지입니다. 만약 TIMEDIFF() 함수의 계산 결과가 이 범위를 벗어난다면, MySQL은 인자 값의 부호에 따라 '-838:59:59' 또는 '838:59:59' 중 하나를 반환합니다.
예제
mysql> Select TIMEDIFF('2017-09-01 03:05:45','2017-10-22 03:05:45')AS 'Out of Range TIME Difference';
+------------------------------+
| Out of Range TIME Difference |
+------------------------------+
| -838:59:59 |
+------------------------------+
1 row in set, 1 warning (0.00 sec)
mysql> Select TIMEDIFF('2017-10-22 04:05:45','2017-09-01 03:05:45')AS 'Out of Range TIME Difference';
+------------------------------+
| Out of Range TIME Difference |
+------------------------------+
| 838:59:59 |
+------------------------------+
1 row in set, 1 warning (0.01 sec)
결과 분석
첫 번째 쿼리에서는 첫 번째 날짜가 두 번째 날짜보다 앞선 시점이므로 시간 차이가 음수가 됩니다. 이 차이는 약 51일에 해당하며, 시간으로 환산하면 TIME 필드의 최솟값인 '-838:59:59'보다 더 작아질 수 없기 때문에 MySQL은 '-838:59:59'를 반환합니다.
반대로 두 번째 쿼리에서는 두 날짜 사이의 차이가 약 51일로, 이를 시간 단위로 환산하면 1,200시간을 넘어 TIME 필드의 최댓값인 '838:59:59'를 초과하게 됩니다. 따라서 MySQL은 '838:59:59'를 반환합니다.
이처럼 시간 차이의 총합이 TIME 필드의 허용 범위를 벗어나는 경우, MySQL은 해당 범위의 최댓값 또는 최솟값을 반환하고 동시에 경고(warning) 메시지를 함께 출력한다는 점을 위 두 쿼리의 실행 결과에서 확인할 수 있습니다.