728x90

오라클에서 시간대(time zone)를 다룰 때 TZ_OFFSET 함수는 매우 유용한 도구입니다. 이 함수는 주어진 시간대의 오프셋(offset), 즉 UTC 기준의 시간차를 반환합니다. 시간대 기반의 로직이 필요한 개발자라면 반드시 숙지해야 할 함수입니다.
1. TZ_OFFSET 함수란?
TZ_OFFSET 함수는 오라클 SQL에서 시간대 이름을 입력받아 그 시간대의 UTC 오프셋을 문자열 형식('+09:00' 등)으로 반환합니다.
📌 문법(Syntax)
TZ_OFFSET(timezone_name)
✔️ 매개변수 설명
- timezone_name: 시간대 이름 또는 지역 (예: 'Asia/Seoul', 'US/Pacific')
2. 기본 사용 예제
SELECT TZ_OFFSET('Asia/Seoul') FROM DUAL;
-- 결과: +09:00
SELECT TZ_OFFSET('US/Pacific') FROM DUAL;
-- 결과: -07:00 (서머타임 적용 시)
3. CURRENT_SESSION TIME ZONE과의 비교
현재 세션의 시간대와 오프셋을 함께 확인하는 것이 중요합니다.
SELECT SESSIONTIMEZONE, TZ_OFFSET(SESSIONTIMEZONE) FROM DUAL;
이 쿼리를 통해 현재 세션의 시간대와 그 오프셋을 동시에 확인할 수 있습니다.
4. 실무 활용 시나리오
- 다국적 애플리케이션에서 사용자별 시간대 표시
- 로그 기록 시 UTC 변환 기준 설정
- 스케줄 기반의 이벤트 발생 처리
5. 자주 사용하는 시간대 예제
| 지역 | 입력값 | 오프셋 예시 |
|---|---|---|
| 대한민국 | 'Asia/Seoul' | +09:00 |
| 미국 서부 | 'US/Pacific' | -08:00 / -07:00 (DST) |
| 영국 | 'Europe/London' | +00:00 / +01:00 (DST) |
| 일본 | 'Asia/Tokyo' | +09:00 |
6. 시간대 목록 확인 방법
SELECT DISTINCT tzname FROM v$timezone_names ORDER BY tzname;
위 쿼리를 통해 오라클에서 지원하는 전체 시간대 목록을 확인할 수 있습니다.
7. 예외 및 유의사항
- 시간대 이름은 대소문자 구분 없이 입력 가능하나, 정확한 명칭을 사용하는 것이 좋습니다.
- Daylight Saving Time(서머타임)에 따라 오프셋이 변동될 수 있으므로 날짜와 함께 사용하는 것을 고려해야 합니다.
8. 시간대와 TIMESTAMP 변환 조합
TZ_OFFSET은 단독으로도 유용하지만, FROM_TZ, CAST, AT TIME ZONE과 같이 사용되면 더욱 강력합니다.
SELECT FROM_TZ(CAST(SYSTIMESTAMP AS TIMESTAMP), 'Asia/Seoul') AT TIME ZONE 'UTC'
FROM DUAL;
이 쿼리는 시스템 타임스탬프를 UTC 기준으로 변환한 예시입니다.
9. 마무리
Oracle의 TZ_OFFSET 함수는 시간대를 기준으로 한 데이터 관리에서 매우 중요한 역할을 합니다. 글로벌 서비스를 운영하는 개발자나 DBA라면 필수적으로 이해하고 활용해야 할 함수입니다. 위의 예제들을 실습하며 직접 적용해 보시기 바랍니다.
📚 참고 자료
- Oracle 공식 문서
- Oracle Live SQL
- Oracle 19c SQL Language Reference
728x90
'Database > Oracle' 카테고리의 다른 글
| [ORACLE] TO_CHAR() 함수로 숫자와 날짜 형식 자유자재로 변환하기 (0) | 2025.06.05 |
|---|---|
| [ORACLE] TO_NUMBER() 함수로 문자형 숫자 데이터 안전하게 변환하는 방법 (0) | 2025.06.05 |
| [ORACLE] SESSIONTIMEZONE() 함수로 글로벌 애플리케이션 시간대 문제 해결 (0) | 2025.06.05 |
| [ORACLE] DBTIMEZONE() 함수로 데이터베이스 시간대 정확히 설정하는 방법 (0) | 2025.06.05 |
| [ORACLE] LOCALTIMESTAMP()로 시간대 기반 데이터 정확히 처리하기 (0) | 2025.06.05 |