1. NUMTODSINTERVAL() 함수란?
Oracle의 NUMTODSINTERVAL()
함수는 숫자 값을 INTERVAL DAY TO SECOND 데이터 타입으로 변환하는 함수입니다. 이 함수를 사용하면 정수 또는 실수로 표현된 기간을 날짜 타입과 함께 쉽게 연산할 수 있습니다. 단위는 'DAY', 'HOUR', 'MINUTE', 'SECOND'로 지정할 수 있습니다.
2. 기본 문법
NUMTODSINTERVAL(n, interval_unit)
- n: 간격을 의미하는 숫자 값 (예: 5, 1.5)
- interval_unit: 'DAY', 'HOUR', 'MINUTE', 'SECOND' 중 하나
3. 간단한 사용 예제
예제 1: 5일 추가
SELECT SYSDATE + NUMTODSINTERVAL(5, 'DAY') AS result_date FROM dual;
예제 2: 3시간 추가
SELECT SYSDATE + NUMTODSINTERVAL(3, 'HOUR') AS result_date FROM dual;
예제 3: 90분(1.5시간) 추가
SELECT SYSDATE + NUMTODSINTERVAL(90, 'MINUTE') AS result_date FROM dual;
예제 4: 120초 차감
SELECT SYSDATE - NUMTODSINTERVAL(120, 'SECOND') AS result_date FROM dual;
4. 실무 활용 시나리오
- 배치 작업에서 지연시간 추가
- 로그 데이터 유효 기간 계산
- 조건절에서 최근 X분, X시간 이내의 데이터 조회
- 예약 시스템의 시간 오프셋 처리
5. 조건절에서의 활용 예제
예제: 최근 1시간 이내 요청 로그 조회
SELECT *
FROM request_log
WHERE log_time > SYSDATE - NUMTODSINTERVAL(1, 'HOUR');
예제: 15분 이상 경과한 트랜잭션 조회
SELECT *
FROM transactions
WHERE updated_at < SYSDATE - NUMTODSINTERVAL(15, 'MINUTE');
6. 관련 INTERVAL 함수 비교
함수 | 입력 형태 | 반환 타입 | 설명 |
---|---|---|---|
NUMTODSINTERVAL | 숫자 + 단위 ('DAY', 'HOUR', 등) | INTERVAL DAY TO SECOND | 숫자를 시간 간격으로 변환 |
NUMTOYMINTERVAL | 숫자 + 단위 ('YEAR', 'MONTH') | INTERVAL YEAR TO MONTH | 숫자를 연월 간격으로 변환 |
TO_DSINTERVAL | 문자열 (예: '01 02:00:00') | INTERVAL DAY TO SECOND | 문자열 기반 시간 간격 처리 |
7. PL/SQL에서의 활용 예제
DECLARE
v_start_date DATE := SYSDATE;
v_end_date DATE;
BEGIN
v_end_date := v_start_date + NUMTODSINTERVAL(2.5, 'DAY');
DBMS_OUTPUT.PUT_LINE('종료일: ' || TO_CHAR(v_end_date, 'YYYY-MM-DD HH24:MI:SS'));
END;
8. NUMTODSINTERVAL 사용 시 주의사항
- 단위 문자열은 반드시 대문자 'DAY', 'HOUR', 'MINUTE', 'SECOND' 중 하나여야 합니다.
- 정수형/실수형 모두 허용되지만 과도한 소수점 사용은 부정확한 결과 초래 가능
- INTERVAL 연산은
DATE + INTERVAL
또는DATE - INTERVAL
형식만 허용됩니다.
9. 실무 팁
- 시간 조건을 고정 값 대신 INTERVAL 함수로 처리하면 유연성 향상
- 배치 로직이나 스케줄 조건에 자주 사용되므로, 유닛 테스트로 검증 권장
- SYSDATE, SYSTIMESTAMP와 함께 활용 가능 (단, 타입 일치에 유의)
10. 마무리
NUMTODSINTERVAL()
함수는 Oracle SQL에서 시간 간격을 직관적으로 계산할 수 있는 매우 유용한 도구입니다. 특히 실무에서 정량적인 시간 오프셋 계산, 로그 필터링, 배치 예약 등의 작업에 필수적으로 사용되며, 다른 INTERVAL 함수들과 함께 사용하면 더욱 강력한 시간 제어 로직을 구현할 수 있습니다.
출처 및 참고 자료
- Oracle 공식 문서: https://docs.oracle.com/en/database/
- Oracle 21c SQL Language Reference
- 실제 PL/SQL 실무 프로젝트 사례
- Oracle Live SQL 테스트 환경
'Database' 카테고리의 다른 글
[ORACLE] HEXTORAW() 함수 완전 정복 : 16진수 → RAW 변환 실무 가이드 (0) | 2025.06.06 |
---|---|
[ORACLE] NUMTOYMINTERVAL() 사용법과 실전 예제로 배우는 기간 연산 처리 (0) | 2025.06.06 |
[ORACLE] TO_YMINTERVAL()로 년월 간격 처리하기 : 실무 적용 예시 (0) | 2025.06.06 |
[ORACLE] TO_DSINTERVAL() 함수 완전 정복 : 일/시간 간격 처리 마스터하기 (0) | 2025.06.06 |
[ORACLE] TO_LOB() 함수로 VARCHAR2를 CLOB으로 변환하는 방법 (0) | 2025.06.06 |