본문 바로가기
Database/Oracle

[ORACLE] TO_YMINTERVAL()로 년월 간격 처리하기 : 실무 적용 예시

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

오라클 TO_YMINTERVAL()로 년월 간격 처리하기: 실무 적용 예시
[Oracle] TO_YMINTERVAL

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