📅 SQL에서 날짜 차이에 +1을 해주는 이유는?
SQL에서 두 날짜 간의 차이를 구할 때 흔히 DATEDIFF() 또는 end_date - start_date를 사용합니다.
그런데 여기에 +1을 해주는 경우가 종종 등장하는데, 왜 그럴까요?
시작일과 종료일을 모두 포함해야 하는 경우에 +1 해준다.
많은 실무 상황에서는 시작일과 종료일을 포함한 전체 기간이 필요.
즉, 당일 대여도 1일로 간주해야 하는 경우가 대부분.
기본 개념: DATEDIFF()의 반환값
SELECT DATEDIFF('2022-09-30', '2022-09-01'); -- 결과: 29
DATEDIFF(A, B)는 A - B의 일수 차이를 반환합니다.
하지만 이건 "두 날짜 사이의 간격"만 계산한 값입니다.
예를 들어, 9월 1일부터 9월 30일까지 대여한 경우,
실제 사용자는 30일 동안 대여했지만, DATEDIFF는 29만 반환합니다.
-- 예: 2022-09-01부터 2022-09-01까지 대여
SELECT DATEDIFF('2022-09-01', '2022-09-01'); -- 결과: 0 (하지만 실제로는 1일 대여)
-- 해결: +1
SELECT DATEDIFF('2022-09-01', '2022-09-01') + 1; -- 결과: 1 ✅
실전 예시: 장기 대여 구분
SELECT *,
CASE
WHEN DATEDIFF(end_date, start_date) + 1 >= 30 THEN '장기 대여'
ELSE '단기 대여'
END AS RENT_TYPE
FROM car_rental_company_rental_history;
이 쿼리는 대여 기간이 30일 이상인지 판단할 때 사용되며, +1을 통해 대여 시작일과 종료일을 모두 포함한 정확한 기간을 계산합니다.
요약 정리
DATEDIFF(A, B): A일 - B일의 차이(간격)만 반환 (종료일 미포함)
DATEDIFF(A, B) + 1 : 시작일과 종료일 둘 다 포함한 전체 기간. 실무 적용 대여일 수, 입원 기간, 체류 기간 등에서 자주 사용됨
결론
날짜 차이에 +1을 하는 이유는, 시작일과 종료일을 모두 포함한 "전체 사용 일수"를 구하기 위해서입니다.