본문 바로가기
Database/Oracle

[ORACLE] ADD_MONTHS()로 손쉬운 월 단위 날짜 계산 구현하기

by Papa Martino V 2025. 6. 5.
728x90

오라클 ADD_MONTHS()로 손쉬운 월 단위 날짜 계산 구현하기
[Oracle] MONTHS_BETWEEN

 

Oracle SQL에서 날짜 간의 개월 수 차이를 계산해야 할 때 MONTHS_BETWEEN() 함수는 매우 유용합니다. 본 글에서는 해당 함수의 문법, 예제, 실무 활용법, 오류 방지 팁 등을 포함해 개발자가 현업에서 바로 사용할 수 있도록 구성하였습니다.

1. MONTHS_BETWEEN() 함수란?

MONTHS_BETWEEN(date1, date2) 함수는 두 날짜 사이의 개월 수를 반환합니다. 기본적으로 date1 - date2의 개념이며, 반환값은 실수(FLOAT) 형입니다.

  • date1: 기준이 되는 날짜
  • date2: 비교 대상 날짜

예제 1: 기본 사용법

SELECT MONTHS_BETWEEN(DATE '2025-06-01', DATE '2025-01-01') AS months_diff FROM dual;
-- 결과: 5

예제 2: 반대로 계산

SELECT MONTHS_BETWEEN(DATE '2025-01-01', DATE '2025-06-01') AS months_diff FROM dual;
-- 결과: -5

2. 소수점 단위 반환의 의미

두 날짜가 정확히 같은 일자가 아닐 경우, 개월 수는 소수점으로 반환됩니다. 이때 시간 차이에 따라 1개월 미만도 반영됩니다.

예제 3: 소수점 반환

SELECT MONTHS_BETWEEN(DATE '2025-06-15', DATE '2025-06-01') AS result FROM dual;
-- 결과: 약 0.4516

예제 4: 시각까지 포함된 TIMESTAMP 비교

SELECT MONTHS_BETWEEN(
  TO_TIMESTAMP('2025-06-15 12:00:00', 'YYYY-MM-DD HH24:MI:SS'),
  TO_TIMESTAMP('2025-06-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
) AS result FROM dual;

3. 실무 활용 예제

3-1. 고객 계약 경과 개월 수

SELECT customer_id,
       start_date,
       MONTHS_BETWEEN(SYSDATE, start_date) AS contract_duration
FROM customer_contracts;

3-2. 상품 투자 경과 기간

SELECT product_name,
       issue_date,
       ROUND(MONTHS_BETWEEN(SYSDATE, issue_date), 2) AS months_passed
FROM financial_products;

3-3. 가입 해지 고객 추적

SELECT customer_id,
       end_date,
       MONTHS_BETWEEN(end_date, start_date) AS subscription_months
FROM user_subscription
WHERE status = 'INACTIVE';

4. 결괏값 반올림 처리

MONTHS_BETWEEN은 소수점 형태로 반환되므로 필요시 ROUND(), FLOOR(), CEIL() 등과 함께 사용합니다.

예제 5: 반올림 적용

SELECT ROUND(MONTHS_BETWEEN(DATE '2025-06-28', DATE '2025-03-15')) AS rounded_months FROM dual;

5. 주의사항 및 팁

  • 두 날짜가 모두 같은 일(day)이면 정수로 반환
  • 일자가 다르면 소수점 포함 결과가 나옴
  • 시간(HH24:MI:SS)이 결과에 영향을 미칠 수 있음

6. ADD_MONTHS와의 차이점

항목 MONTHS_BETWEEN ADD_MONTHS
용도 개월 수 차이 계산 개월 수 더하기/빼기
결과 FLOAT DATE
기준 date1 - date2 기준일 + N개월

7. 관련 함수

  • ADD_MONTHS(date, n): 날짜에 개월 수를 더함
  • LAST_DAY(date): 해당 월의 마지막 날짜
  • TRUNC(date, 'MM'): 해당 월의 1일로 자름

8. 요약

MONTHS_BETWEEN()은 날짜 간 개월 수 차이를 계산하는 데 매우 유용한 함수입니다. 특히 금융, 인사, 리포트 자동화 등의 업무에서 폭넓게 사용됩니다. 소수점 단위까지 고려할 수 있어, 정밀한 기간 비교가 필요한 상황에서 꼭 알아두어야 할 함수입니다.

참고자료

728x90