본문 바로가기
Database/Oracle

[ORACLE] TO_TIMESTAMP() 함수로 정밀한 시간 데이터 처리하기

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

오라클 TO_TIMESTAMP() 함수로 정밀한 시간 데이터 처리하기
[Oracle] TO_TIMESTAMP

 

1. TO_TIMESTAMP 함수란?

TO_TIMESTAMP() 함수는 문자열을 오라클의 TIMESTAMP 형식으로 변환하는 함수입니다. TIMESTAMPDATE 타입보다 정밀도가 높아, 시간 정보(시, 분, 초, 마이크로초)까지 표현할 수 있습니다.

TO_TIMESTAMP(char [, format])
  • char: 변환할 문자열
  • format: 문자열의 날짜 및 시간 포맷 (선택)

2. 기본 사용 예제

SELECT TO_TIMESTAMP('2025-06-05 14:30:00', 'YYYY-MM-DD HH24:MI:SS')
FROM DUAL;

이 쿼리는 문자열을 TIMESTAMP 데이터 타입으로 변환합니다.

3. 주요 포맷 코드 정리

  • YYYY: 4자리 연도
  • MM: 2자리 월
  • DD: 2자리 일
  • HH24: 24시간제 시
  • MI: 분
  • SS: 초
  • FF: 소수점 이하 초 (마이크로초)
SELECT TO_TIMESTAMP('2025-06-05 14:30:00.123456',
       'YYYY-MM-DD HH24:MI:SS.FF6')
FROM DUAL;

4. DATE vs TIMESTAMP 비교

구분 DATE TIMESTAMP
정밀도 초 단위까지 소수점 이하 마이크로초까지
기본 크기 7바이트 11바이트 이상
활용 예 일반적인 시간 저장 트랜잭션 타임스탬프, 로깅

5. 실무 활용 예제

5.1 트랜잭션 기록 저장

INSERT INTO transaction_log (id, log_time)
VALUES ('TX123', TO_TIMESTAMP('2025-06-05 10:00:15.512300', 'YYYY-MM-DD HH24:MI:SS.FF6'));

5.2 시간 간격 비교

SELECT * FROM sensor_data
WHERE read_time >= TO_TIMESTAMP('2025-06-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS');

5.3 시간 포맷 변환 후 출력

SELECT TO_CHAR(TO_TIMESTAMP('2025-06-05 14:30:00', 'YYYY-MM-DD HH24:MI:SS'),
              'YYYY-MM-DD HH24:MI:SS.FF3')
FROM DUAL;

6. 에러 발생 사례 및 해결 방법

ORA-01861: literal does not match format string 오류는 문자열과 포맷이 일치하지 않을 때 발생합니다.

-- 오류 예시
SELECT TO_TIMESTAMP('2025/06/05', 'YYYY-MM-DD') FROM DUAL; -- 포맷 불일치

해결 방법: 입력 문자열과 포맷 문자열을 일치시켜야 합니다.

7. 성능과 최적화 팁

  • WHERE 절에서 TO_TIMESTAMP() 사용 시 인덱스가 무시될 수 있음
  • BIND 변수와 함께 사용하면 성능 향상 가능
  • 자주 사용하는 포맷은 별도 함수 또는 VIEW로 추상화 추천

8. TIMESTAMP 관련 함수 확장

  • CURRENT_TIMESTAMP: 현재 시간 반환 (세션 타임존 고려)
  • SYSTIMESTAMP: 시스템의 현재 타임스탬프 반환
  • EXTRACT(): 타임스탬프에서 연/월/일/시/분 추출
SELECT EXTRACT(SECOND FROM SYSTIMESTAMP) FROM DUAL;

9. 결론

오라클 TO_TIMESTAMP() 함수는 시간 정밀도가 필요한 환경에서 매우 중요한 함수입니다. 트랜잭션 로그, 센서 데이터, 고속 거래 시스템 등에서 정확한 시간 기록과 비교를 위해 반드시 이해하고 활용해야 합니다. 다양한 포맷 코드와 실무 예제를 익히면 복잡한 시간 데이터를 효과적으로 처리할 수 있습니다.

10. 참고자료 및 출처

728x90