728x90

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()은 날짜 간 개월 수 차이를 계산하는 데 매우 유용한 함수입니다. 특히 금융, 인사, 리포트 자동화 등의 업무에서 폭넓게 사용됩니다. 소수점 단위까지 고려할 수 있어, 정밀한 기간 비교가 필요한 상황에서 꼭 알아두어야 할 함수입니다.
참고자료
- Oracle 공식 문서
- Oracle 10g MONTHS_BETWEEN Reference
- 사내 데이터 분석 프로젝트 실전 사례 기반
728x90
'Database > Oracle' 카테고리의 다른 글
| [ORACLE] LAST_DAY() 사용법 정리 : 월 마지막 날 자동 계산 방법 (0) | 2025.06.05 |
|---|---|
| [ORACLE] NEXT_DAY() 함수로 다음 특정 요일 구하는 방법과 실전 팁 (0) | 2025.06.05 |
| [ORACLE] ADD_MONTHS()로 손쉬운 월 단위 날짜 계산 구현하기 (0) | 2025.06.05 |
| [ORACLE] TO_TIMESTAMP()로 문자열을 타임 스탬프로 변환하는 방법 (0) | 2025.06.05 |
| [ORACLE] TO_CHAR() 함수로 날짜를 문자열로 변환하는 실무 팁과 예제 (0) | 2025.06.04 |