728x90

[Oracle] 오라클 NUMTOYMINTERVAL() 함수 완전 가이드
1. NUMTOYMINTERVAL() 함수란?
Oracle의 NUMTOYMINTERVAL() 함수는 숫자 값을 INTERVAL YEAR TO MONTH 데이터 타입으로 변환합니다. 즉, 숫자로 표현된 연도 또는 개월 수를 INTERVAL 형식으로 바꾸어 날짜 계산에 사용할 수 있도록 도와주는 함수입니다.
2. 문법
NUMTOYMINTERVAL(n, interval_unit)
- n: 간격을 의미하는 숫자 값 (예: 1, 2.5)
- interval_unit: 'YEAR' 또는 'MONTH'
3. 기본 사용 예제
예제 1: 1년 추가
SELECT SYSDATE + NUMTOYMINTERVAL(1, 'YEAR') AS result_date FROM dual;
예제 2: 6개월 추가
SELECT SYSDATE + NUMTOYMINTERVAL(6, 'MONTH') AS result_date FROM dual;
예제 3: 2년 반 추가 (주의)
-- 정수만 처리되며, 소수점은 허용되지 않음
-- 아래 예제는 오류 발생 가능
SELECT SYSDATE + NUMTOYMINTERVAL(2.5, 'YEAR') FROM dual;
💡 TIP: NUMTOYMINTERVAL()은 내부적으로 소수점을 절사하거나 오류를 발생시킬 수 있으므로, 정확한 간격 처리를 원할 경우 TO_YMINTERVAL() 사용을 고려하세요.
4. 실무 활용 예시
- 계약 만기일 계산: 시작일 + 계약 기간(예: 2년)
- 정기 구독 갱신일 산정
- 마케팅 쿠폰 유효 기간 계산 (예: 3개월)
- 회원 등급 갱신 주기 적용 (예: 12개월 단위)
5. 조건절에서의 활용 예제
예제: 1년 이내 가입한 사용자 조회
SELECT *
FROM users
WHERE signup_date > SYSDATE - NUMTOYMINTERVAL(1, 'YEAR');
예제: 6개월 이상 경과된 주문 조회
SELECT *
FROM orders
WHERE order_date < SYSDATE - NUMTOYMINTERVAL(6, 'MONTH');
6. 관련 함수 비교
| 함수 | 입력 형태 | 반환 타입 | 용도 |
|---|---|---|---|
| NUMTOYMINTERVAL | 숫자 + 'YEAR' or 'MONTH' | INTERVAL YEAR TO MONTH | 숫자 기반 연/월 간격 계산 |
| TO_YMINTERVAL | 문자열 'YY-MM' | INTERVAL YEAR TO MONTH | 직접 연-월 간격 명시 |
| NUMTODSINTERVAL | 숫자 + 단위(DAY, HOUR 등) | INTERVAL DAY TO SECOND | 일/시/분/초 간격 계산 |
7. PL/SQL에서의 활용
DECLARE
v_start DATE := SYSDATE;
v_end DATE;
BEGIN
v_end := v_start + NUMTOYMINTERVAL(3, 'MONTH');
DBMS_OUTPUT.PUT_LINE('3개월 후: ' || TO_CHAR(v_end, 'YYYY-MM-DD'));
END;
8. 사용 시 주의사항
- 'YEAR', 'MONTH' 외 단위는 허용되지 않음
- 간격 값은 일반적으로 정수형 숫자 사용 권장
- 소수점 사용 시 예상치 못한 결과가 발생할 수 있음
- 날짜 간 비교 시 INTERVAL 연산이 아닌
+ 또는 -로 사용해야 함
9. 다양한 활용 팁
- 연 단위 구독 만료일 계산: SYSDATE + NUMTOYMINTERVAL(1, 'YEAR')
- 월 단위 정기 점검일 생성: NEXT_DATE + NUMTOYMINTERVAL(1, 'MONTH')
- 데이터 유지 기간 정책 반영 시 조건절 간단화에 효과적
10. 마무리
NUMTOYMINTERVAL() 함수는 Oracle SQL에서 연도 또는 월 단위 간격을 간단히 계산할 수 있도록 해주는 강력한 도구입니다. 복잡한 날짜 계산이나 연속적인 주기 설정에 자주 활용되며, 실무에서는 구독, 계약, 마케팅 시스템 등에서 매우 유용하게 쓰입니다. TO_YMINTERVAL(), NUMTODSINTERVAL()과 함께 사용하면 더욱 유연하고 강력한 시간 제어가 가능합니다.
출처 및 참고 자료
- Oracle 공식 문서: https://docs.oracle.com/en/database/
- Oracle 21c SQL Language Reference
- Oracle Built-in Functions Guide
- 현업 PL/SQL 개발자 경험 및 테스트 환경 기준
728x90
'Database > Oracle' 카테고리의 다른 글
| [ORACLE] RAWTOHEX() 함수 실무 활용 법 : 해시 값, 토큰 비교에 강력한 이유 (0) | 2025.06.06 |
|---|---|
| [ORACLE] HEXTORAW() 함수 완전 정복 : 16진수 → RAW 변환 실무 가이드 (0) | 2025.06.06 |
| [ORACLE] NUMTODSINTERVAL() 함수로 초/분/시간/일 간격 간편 계산하기 (0) | 2025.06.06 |
| [ORACLE] TO_YMINTERVAL()로 년월 간격 처리하기 : 실무 적용 예시 (0) | 2025.06.06 |
| [ORACLE] TO_DSINTERVAL() 함수 완전 정복 : 일/시간 간격 처리 마스터하기 (0) | 2025.06.06 |