MySQL DATEDIFF() 함수의 음수 값 문제
MySQL의 DATEDIFF() 함수는 두 날짜 사이의 일수 차이를 계산하는 데 사용됩니다. 이 함수는 첫 번째 날짜에서 두 번째 날짜를 뺀 값을 반환하기 때문에, 인자의 순서에 따라 음수 값이 반환될 수 있습니다.
예를 들어 다음과 같은 'differ' 테이블이 있다고 가정해 보겠습니다.
mysql> select * from differ;
+------------+-------------+
| OrderDate | WorkingDate |
+------------+-------------+
| 2017-10-22 | 2017-10-29 |
| 2017-10-25 | 2017-10-30 |
| 2017-10-25 | 2017-11-30 |
+------------+-------------+
3 rows in set (0.00 sec)
음수 값이 반환되는 경우
위 테이블에서 OrderDate(주문일)와 WorkingDate(작업일)의 차이를 구하면, 주문일이 작업일보다 앞선 날짜이기 때문에 결과가 모두 음수로 출력됩니다.
mysql> Select DATEDIFF(OrderDate, WorkingDate) AS 'DIFFERENCE IN DAYS' from differ;
+--------------------+
| DIFFERENCE IN DAYS |
+--------------------+
| -7 |
| -5 |
| -36 |
+--------------------+
3 rows in set (0.00 sec)
ABS() 함수로 음수 값 무시하기
이러한 음수 값을 무시하고 절대값(양수)으로 결과를 얻고 싶다면 MySQL의 ABS() 함수를 함께 사용하면 됩니다. ABS() 함수는 입력된 숫자의 절대값을 반환하므로, DATEDIFF()의 결과가 음수라도 항상 양수로 변환해 줍니다.
mysql> Select ABS(DATEDIFF(OrderDate, WorkingDate)) AS 'DIFFERENCE IN DAYS' from differ;
+--------------------+
| DIFFERENCE IN DAYS |
+--------------------+
| 7 |
| 5 |
| 36 |
+--------------------+
3 rows in set (0.00 sec)
정리
DATEDIFF() 함수가 음수를 반환하는 것을 방지하는 가장 간단한 방법은 ABS(DATEDIFF(날짜1, 날짜2)) 형태로 작성하는 것입니다. 이렇게 하면 두 날짜의 인자 순서에 상관없이 항상 일수 차이를 양수로 얻을 수 있어, 날짜 간격을 계산할 때 매우 유용합니다.