728x90

1. TO_YMINTERVAL() 함수란?
TO_YMINTERVAL() 함수는 Oracle SQL에서 문자열을 연도-월 간격(Interval Year to Month) 데이터 타입으로 변환하는 데 사용됩니다. 주로 날짜 간 연산, 주기적 데이터 조작, 예약 기능 구현 등에 활용됩니다.
2. 기본 문법
TO_YMINTERVAL('[-]YY-MM')
- 입력값: 문자열 형식의 연도-월 (예: '02-06' → 2년 6개월)
- 반환값: INTERVAL YEAR TO MONTH 형식
3. 간단한 사용 예제
예제 1: 1년 3개월 더하기
SELECT SYSDATE + TO_YMINTERVAL('01-03') AS result_date FROM dual;
예제 2: 2년 빼기
SELECT SYSDATE - TO_YMINTERVAL('02-00') AS result_date FROM dual;
예제 3: 마이너스 간격 사용
SELECT TO_YMINTERVAL('-05-07') AS negative_interval FROM dual;
4. 실무 활용 시나리오
- 정기 구독 기간 계산 (예: +1년 6개월)
- 장기 계약 종료일 산정
- 데이터 보관 기간 기준 계산 (예: -7년)
- 연도-월 기준 리포트 생성 로직
5. 관련 INTERVAL 함수 비교
| 함수 | 입력값 예시 | 단위 | 설명 |
|---|---|---|---|
| TO_YMINTERVAL | '02-03' | 년/월 | 연도-월 간격 표현 |
| TO_DSINTERVAL | '05 12:30:00' | 일/시/분/초 | 하루 이하 단위의 간격 표현 |
| NUMTODSINTERVAL | 30, 'DAY' | 숫자 기반 | 숫자 → INTERVAL DAY TO SECOND |
| NUMTOYMINTERVAL | 2, 'YEAR' | 숫자 기반 | 숫자 → INTERVAL YEAR TO MONTH |
6. 자주 발생하는 오류 및 해결
- ORA-01873: 잘못된 입력 형식 → 'YY-MM' 형식 준수 필요
- ORA-30084: DATE + INTERVAL 오류 → 타입 캐스팅 확인
- 주의: INTERVAL은 문자열이 아닌 내장 타입이므로 비교/필터 조건에서 특별한 처리 필요
7. 조건절 활용 예제
예제: 3년 이상 경과한 데이터 조회
SELECT *
FROM contract_table
WHERE end_date < SYSDATE - TO_YMINTERVAL('03-00');
예제: 회원가입 2년 이내 고객 조회
SELECT *
FROM users
WHERE signup_date > SYSDATE - TO_YMINTERVAL('02-00');
8. INTERVAL 데이터 타입의 장점
- 직관적인 연산 가능 (SYSDATE + INTERVAL)
- 다양한 단위(년/월/일/시간)로 분리 가능
- 날짜 관련 로직에서 가독성과 유지보수 용이
- 숫자보다 명확한 의미 전달
9. INTERVAL과 문자열 조합 예제
-- 동적 SQL에서 INTERVAL 문자열 생성
DECLARE
v_sql VARCHAR2(1000);
v_period VARCHAR2(10) := '01-06';
BEGIN
v_sql := 'SELECT SYSDATE + TO_YMINTERVAL(''' || v_period || ''') FROM dual';
EXECUTE IMMEDIATE v_sql;
END;
10. 마무리 및 활용 팁
TO_YMINTERVAL()은 단순한 날짜 계산 이상으로 다양한 업무 로직에 유용하게 적용될 수 있는 강력한 함수입니다. 특히 계약, 구독, 로그, 기간 필터링 등 많은 실무 로직에서 직관적이고 명확한 시간 간격 처리가 가능하므로, 다른 시간 함수와 병행하여 사용하는 것이 좋습니다.
출처 및 참고 문서
- Oracle 공식 문서: https://docs.oracle.com/en/database/
- Oracle 21c SQL Language Reference
- Oracle Built-in Functions Reference
- 실제 PL/SQL 프로젝트 사례 및 테스트 환경 기준
728x90
'Database > Oracle' 카테고리의 다른 글
| [ORACLE] NUMTOYMINTERVAL() 사용법과 실전 예제로 배우는 기간 연산 처리 (0) | 2025.06.06 |
|---|---|
| [ORACLE] NUMTODSINTERVAL() 함수로 초/분/시간/일 간격 간편 계산하기 (0) | 2025.06.06 |
| [ORACLE] TO_DSINTERVAL() 함수 완전 정복 : 일/시간 간격 처리 마스터하기 (0) | 2025.06.06 |
| [ORACLE] TO_LOB() 함수로 VARCHAR2를 CLOB으로 변환하는 방법 (0) | 2025.06.06 |
| [ORACLE] TO_BLOB() 함수로 이미지, 파일 데이터 처리하기 (0) | 2025.06.06 |