MySQL의 DATEDIFF() 함수는 날짜(date) 값뿐만 아니라 날짜와 시간(datetime) 값도 함께 처리할 수 있습니다. 다만, 이 함수는 시간(time) 부분을 완전히 무시한다는 점이 중요한 특징입니다.
DATEDIFF() 함수의 동작 방식
인자로 전달된 값에 시간 구성 요소가 포함되어 있더라도, DATEDIFF() 함수는 오직 날짜 부분만 비교하여 두 날짜 사이의 차이를 일(day) 단위로 반환합니다. 즉, 시간대가 몇 시간 차이 나든 결과값에는 영향을 주지 않습니다.
예제 1: 서로 다른 날짜 비교
mysql> Select DATEDIFF('2018-10-22 04:05:36','2017-10-22 03:05:45');
+-------------------------------------------------------+
| DATEDIFF('2018-10-22 04:05:36','2017-10-22 03:05:45') |
+-------------------------------------------------------+
| 365 |
+-------------------------------------------------------+
1 row in set (0.00 sec)위 쿼리에서 두 값은 약 1시간 차이로 거의 같은 시각이지만, 날짜가 정확히 1년(365일) 차이 나기 때문에 결과는 365가 반환됩니다.
예제 2: 같은 날짜 비교
mysql> Select DATEDIFF('2017-10-22 04:05:36','2017-10-22 03:05:45');
+-------------------------------------------------------+
| DATEDIFF('2017-10-22 04:05:36','2017-10-22 03:05:45') |
+-------------------------------------------------------+
| 0 |
+-------------------------------------------------------+
1 row in set (0.00 sec)두 값의 시간은 약 1시간 정도 차이가 나지만, 날짜가 동일하므로 결과는 0입니다. 이처럼 DATEDIFF() 함수는 시간 값을 계산에서 제외하고 순수하게 날짜 간의 일수 차이만을 구합니다.
정리
DATEDIFF() 함수에 시간 구성 요소를 포함해도 MySQL은 이를 무시하고 두 날짜 간의 차이를 일 단위로 반환합니다. 만약 시간까지 고려한 정밀한 차이가 필요하다면 TIMESTAMPDIFF() 함수를 사용하는 것이 좋습니다.