기획자가 알아야 할 IT지식/기획자가 알아야 할 SQL

17강. 날짜 차이 및 월 단위 계산하기 (MONTHS_BETWEEN, ADD_MONTHS)

일잘러로 살기 2025. 3. 22. 12:03

SQL에서는 날짜 데이터를 다룰 때 두 날짜 간 개월 수를 계산하거나 특정 개월 수를 더하거나 빼는 기능이 자주 필요합니다.
이때 활용하는 함수가 MONTHS_BETWEENADD_MONTHS 입니다.


✅ 1. MONTHS_BETWEEN 함수란?

MONTHS_BETWEEN(날짜1, 날짜2) 함수는 두 날짜 간 개월 수 차이를 반환합니다.

  • 날짜1: 비교 기준이 되는 날짜
  • 날짜2: 빼려는 날짜
  • 결과값: 날짜1 - 날짜2의 개월 수 차이를 소수점 포함하여 반환

📌 MONTHS_BETWEEN 기본 예제

SELECT MONTHS_BETWEEN(TO_DATE('2024-06-01', 'YYYY-MM-DD'),
                      TO_DATE('2024-03-01', 'YYYY-MM-DD')) AS result
  FROM dual;


📌 실행 결과

설명: 2024-06-01과 2024-03-01의 차이는 3개월이므로 3이 반환됩니다.


📌 일 단위 차이가 있는 경우

SELECT MONTHS_BETWEEN(TO_DATE('2024-06-15', 'YYYY-MM-DD'),
                      TO_DATE('2024-03-01', 'YYYY-MM-DD')) AS result
  FROM dual;


📌 실행 결과

 

설명: 3.4833은 3개월 + 14일(0.4833개월) 을 의미합니다.
→ MONTHS_BETWEEN은 일 단위 차이까지 소수점으로 계산합니다.


✅ 2. ADD_MONTHS 함수란?

ADD_MONTHS(날짜, 개월 수) 함수는 특정 날짜에 개월 수를 더하거나 뺀 날짜를 반환합니다.

  • 날짜: 기준이 되는 날짜
  • 개월 수: 더하거나 뺄 개월 수 (음수 입력 시 개월 수 감소)

📌 ADD_MONTHS 기본 예제

SELECT ADD_MONTHS(TO_DATE('2024-03-01', 'YYYY-MM-DD'), 3) AS new_date
  FROM dual;


📌 실행 결과

설명: 2024-03-01에서 3개월 후인 2024-06-01이 반환됩니다.


📌 개월 수를 빼는 경우

SELECT ADD_MONTHS(TO_DATE('2024-03-01', 'YYYY-MM-DD'), -3) AS new_date
  FROM dual;


📌 실행 결과

설명: -3을 입력하면 3개월 전인 2023-12-01이 반환됩니다.


📌 월의 마지막 날일 때 처리 방식

ADD_MONTHS를 사용하면 말일 처리도 가능합니다.

SELECT ADD_MONTHS(TO_DATE('2024-01-31', 'YYYY-MM-DD'), 1) AS new_date
  FROM dual;


📌 실행 결과

설명: 1월 31일에서 1개월 추가하면 2월 29일(윤년 기준) 로 자동 조정됩니다.
→ ADD_MONTHS는 말일을 자동 조정하여 반환합니다.


✅ 3. MONTHS_BETWEEN & ADD_MONTHS 활용 사례

(1) 특정 고객의 가입 후 경과 개월 수 계산

고객이 가입한 날짜로부터 현재까지 몇 개월이 지났는지 계산할 수 있습니다.

SELECT customer_id, name,
       MONTHS_BETWEEN(SYSDATE, join_date) AS months_since_join
  FROM customers;

설명: SYSDATE를 사용하여 현재 날짜 기준으로 가입한 지 몇 개월이 지났는지 계산합니다.
→ 이를 통해 VIP 고객 선정, 혜택 제공, 계약 갱신 일정 관리 등을 할 수 있습니다.


(2) 특정 날짜로부터 계약 만료일 계산

예를 들어, 1년(12개월) 계약을 연장한 만료일을 계산하고 싶다면?

SELECT contract_id, customer_id,
       ADD_MONTHS(contract_start_date, 12) AS contract_end_date
  FROM contracts;

설명: ADD_MONTHS(계약 시작일, 12)을 사용하여 1년 뒤 만료일을 계산합니다.
→ 이를 활용하면 자동 갱신, 연장 만료일 설정 등을 쉽게 할 수 있습니다.


(3) 특정 월에 만기가 도래하는 계약 조회

예를 들어, 6개월 이내에 만료되는 계약을 조회하고 싶다면?

SELECT contract_id, customer_id, contract_end_date
  FROM contracts
 WHERE contract_end_date <= ADD_MONTHS(SYSDATE, 6);

설명: ADD_MONTHS(SYSDATE, 6)은 현재 날짜로부터 6개월 후의 날짜를 의미합니다.
→ WHERE contract_end_date <= 조건을 사용하면 6개월 이내에 만료되는 계약만 조회할 수 있습니다.


✅ 4. 정리

MONTHS_BETWEEN(날짜1, 날짜2) → 날짜1과 날짜2의 개월 차이를 소수점 포함하여 반환
ADD_MONTHS(날짜, 개월 수) → 특정 날짜에 개월 수를 더하거나 빼서 새로운 날짜 반환
가입 후 경과 개월 수 계산, 계약 만료일 계산, 특정 월에 만기 도래 계약 조회 등에 활용 가능