Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL TIMEDIFF() 함수의 결과가 TIME 필드 범위를 초과하면 어떻게 될까?

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) 메시지를 함께 출력한다는 점을 위 두 쿼리의 실행 결과에서 확인할 수 있습니다.