728x90

1. TO_DSINTERVAL() 함수란?
TO_DSINTERVAL() 함수는 Oracle에서 문자열을 INTERVAL DAY TO SECOND 타입으로 변환해 주는 함수입니다. 이 함수는 일, 시간, 분, 초 단위로 시간 간격을 지정하여 날짜 계산을 수행할 수 있게 해 줍니다.
2. 문법
TO_DSINTERVAL('[-]DD HH:MI:SS')
- DD: 일 수 (Days)
- HH: 시 (Hours)
- MI: 분 (Minutes)
- SS: 초 (Seconds)
3. 기본 사용 예제
예제 1: 날짜에 일 단위 간격 더하기
SELECT SYSDATE + TO_DSINTERVAL('5 00:00:00') AS plus_5_days FROM dual;
예제 2: 날짜에 시간 간격 더하기
SELECT SYSDATE + TO_DSINTERVAL('0 12:00:00') AS plus_12_hours FROM dual;
예제 3: 날짜에 마이너스 간격 적용
SELECT SYSDATE - TO_DSINTERVAL('1 03:30:00') AS minus_1_day_3_5_hours FROM dual;
4. 실무에서의 활용 사례
- 로그 데이터 분석 시 특정 시간 이내 필터링
- 예약 시스템에서 유효 시간 계산
- 배치 작업 시간 지연 처리
- 타임존 차이 보정 및 시간 간격 계산
5. INTERVAL 관련 함수 비교
| 함수 | 형식 | 용도 | 예시 |
|---|---|---|---|
| TO_DSINTERVAL | 'DD HH:MI:SS' | 일, 시, 분, 초 간격 처리 | '02 06:30:00' |
| TO_YMINTERVAL | 'YY-MM' | 연/월 간격 처리 | '01-03' |
| NUMTODSINTERVAL | 숫자 + 단위 | 정수 기반 간격 처리 | 30, 'MINUTE' |
| NUMTOYMINTERVAL | 숫자 + 단위 | 연/월 간격 | 2, 'YEAR' |
6. 자주 발생하는 오류와 해결
- ORA-01873: 포맷 오류 → 'DD HH24:MI:SS' 형식 확인 필요
- ORA-30076: INTERVAL 타입 처리 오류 → 날짜 연산 시 타입 호환 확인
- 정수형 숫자를 바로 더하지 말고
TO_DSINTERVAL을 사용하여 명시적으로 표현
7. INTERVAL을 조건절에 사용하는 방법
예제: 최근 2일 이내에 생성된 데이터 조회
SELECT * FROM user_logs
WHERE created_at > SYSDATE - TO_DSINTERVAL('2 00:00:00');
예제: 1일 4시간 이상 지난 데이터 조회
SELECT * FROM events
WHERE updated_at < SYSDATE - TO_DSINTERVAL('1 04:00:00');
8. INTERVAL 활용 팁
- 시간 계산 시
+/- INTERVAL연산으로 날짜 처리 가능 - 동적 SQL에서도 문자열 조합으로 활용 가능
- DBMS_SCHEDULER나 JOB 설정 시 유용하게 쓰임
9. PL/SQL 내에서의 활용 예제
DECLARE
v_future_date DATE;
BEGIN
v_future_date := SYSDATE + TO_DSINTERVAL('3 00:00:00');
DBMS_OUTPUT.PUT_LINE('3일 후 날짜: ' || TO_CHAR(v_future_date, 'YYYY-MM-DD HH24:MI:SS'));
END;
10. 마무리
TO_DSINTERVAL() 함수는 오라클에서 시간 간격 기반 연산이 필요한 경우 가장 직관적으로 활용할 수 있는 도구입니다. 다양한 시간 단위를 문자열 형태로 명확하게 표현하고, 조건문, 날짜 연산, 프로시저 등 다양한 영역에서 일관되게 사용할 수 있다는 점에서 실무 개발자에게 매우 유용한 함수입니다.
출처 및 참고 자료
- Oracle 공식 문서: https://docs.oracle.com/en/database/
- Oracle 21c SQL Language Reference
- Oracle PL/SQL Developer’s Guide
- 실제 프로젝트 및 PL/SQL 환경 테스트 기반
728x90
'Database > Oracle' 카테고리의 다른 글
| [ORACLE] NUMTODSINTERVAL() 함수로 초/분/시간/일 간격 간편 계산하기 (0) | 2025.06.06 |
|---|---|
| [ORACLE] TO_YMINTERVAL()로 년월 간격 처리하기 : 실무 적용 예시 (0) | 2025.06.06 |
| [ORACLE] TO_LOB() 함수로 VARCHAR2를 CLOB으로 변환하는 방법 (0) | 2025.06.06 |
| [ORACLE] TO_BLOB() 함수로 이미지, 파일 데이터 처리하기 (0) | 2025.06.06 |
| [ORACLE] TO_NCLOB() 함수로 한글 데이터 안정 저장하기 (0) | 2025.06.06 |