728x90

Oracle SQL에서 날짜를 기준으로 월 단위로 계산할 때 가장 많이 사용되는 함수 중 하나가 ADD_MONTHS()입니다. 본 문서에서는 ADD_MONTHS 함수의 기본 사용법부터 실무에 유용한 활용 예제까지 정리하여, 개발자가 바로 적용할 수 있도록 구성하였습니다.
1. ADD_MONTHS() 함수란?
ADD_MONTHS(date, n) 함수는 특정 날짜에 월 단위로 더하거나 빼서 새로운 날짜를 반환합니다.
date: 기준 날짜 (DATE 또는 TIMESTAMP 타입)n: 더할(+) 또는 뺄(-) 개월 수 (정수)
예제 1: 기본 사용법
SELECT ADD_MONTHS(DATE '2025-06-01', 2) AS after_2_months FROM dual;
-- 결과: 2025-08-01
예제 2: 음수 값 사용
SELECT ADD_MONTHS(DATE '2025-06-01', -3) AS before_3_months FROM dual;
-- 결과: 2025-03-01
2. 특수한 날짜 처리
ADD_MONTHS 함수는 월의 일자가 기준 날짜에 없는 경우 자동으로 해당 월의 마지막 날로 보정합니다.
예제 3: 윤년 및 말일 처리
SELECT ADD_MONTHS(DATE '2024-01-31', 1) AS result FROM dual;
-- 결과: 2024-02-29 (윤년 고려)
SELECT ADD_MONTHS(DATE '2023-01-31', 1) AS result FROM dual;
-- 결과: 2023-02-28
3. 실제 업무 활용 예제
3-1. 계약 종료일 계산
SELECT emp_name, start_date,
ADD_MONTHS(start_date, 12) AS end_date
FROM employee_contracts;
3-2. 월별 리포트 생성일 추출
SELECT ADD_MONTHS(TRUNC(SYSDATE, 'MM'), LEVEL - 1) AS month_start
FROM dual
CONNECT BY LEVEL <= 12;
3-3. 만기일 계산
SELECT product_id,
issue_date,
ADD_MONTHS(issue_date, term_months) AS maturity_date
FROM financial_products;
4. ADD_MONTHS + TRUNC 조합 활용
정확한 월 시작일 또는 월 말일 계산을 위해 TRUNC 함수와의 조합이 자주 사용됩니다.
예제 4: 월 마지막 날 계산
SELECT TRUNC(ADD_MONTHS(SYSDATE, 1), 'MM') - 1 AS last_day_of_month FROM dual;
5. 오류 방지 체크포인트
- 날짜 형식이 DATE 또는 TIMESTAMP인지 확인
- n 인자는 정수여야 함 (소수 입력 시 오류 발생)
- 말일 처리에 유의 (특히 2월 등)
6. TO_DATE, TO_TIMESTAMP와 함께 쓰는 예
SELECT ADD_MONTHS(TO_DATE('2025-06-04', 'YYYY-MM-DD'), 6) FROM dual;
SELECT ADD_MONTHS(TO_TIMESTAMP('2025-06-04 12:00:00', 'YYYY-MM-DD HH24:MI:SS'), 6) FROM dual;
7. ADD_MONTHS 함수와 관련된 유사 함수
MONTHS_BETWEEN(date1, date2): 두 날짜 사이의 개월 수LAST_DAY(date): 해당 월의 마지막 날짜 반환TRUNC(date, 'MM'): 해당 월의 1일로 자름
8. 요약 및 마무리
ADD_MONTHS() 함수는 단순한 날짜 이동을 넘어서, 계약 관리, 리포트 자동화, 재무 계산 등 다양한 업무에서 핵심적인 역할을 합니다. 다른 날짜 함수들과의 조합을 통해 더욱 유연하고 정교한 날짜 계산이 가능하므로 반드시 숙지해 두는 것이 좋습니다.
참고자료
- Oracle 공식 문서
- Oracle 10g ADD_MONTHS Reference
- 사내 업무 SQL 작성 사례 및 업무 자동화 스크립트 경험
728x90
'Database > Oracle' 카테고리의 다른 글
| [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 |
| [ORACLE] TO_DATE() 함수로 문자열을 날짜로 변환하는 가장 쉬운 방법 (0) | 2025.06.04 |