정보

[Oracle SQL 강의] 오라클 시간 포맷 변경 완벽 가이드 (HH24:MI:SS부터 밀리초, 타임존까지)

mindlab091908 2025. 5. 7. 22:52
반응형

오라클(Oracle) 데이터베이스를 다루다 보면 날짜와 시간을 원하는 형식으로 출력하거나 가공해야 할 때가 자주 있습니다. 특히 로그 분석, 통계 처리, UI 출력 등을 위한 시간 포맷 변경은 실무에서 매우 자주 접하는 요소입니다. 이 글에서는 오라클 SQL에서 제공하는 시간 포맷 요소들의 의미와 활용법을 정리하고, 실전에서 자주 쓰이는 쿼리 예제까지 상세히 소개합니다.


📌 목차

  1. 오라클 시간 포맷이란?
  2. 기본 날짜 및 시간 포맷 사용법
  3. 12시간(HH12) vs 24시간(HH24) 포맷 비교
  4. 자정이후 초 단위 시간(SSSSS)의 이해와 활용
  5. AM/PM 포맷 한글 및 영문 출력 설정 방법
  6. 밀리세컨드(FF) 포맷으로 정밀한 시간 출력하기
  7. 타임존 정보 추출하기
  8. 마무리 및 실무 팁 정리

1. ⏱️ 오라클 시간 포맷이란?

오라클에서는 TO_CHAR, TO_DATE 함수를 통해 날짜 또는 시간을 문자열 형태로 변환하거나, 문자열을 날짜로 변환할 수 있습니다. 이때 사용하는 포맷 요소(format element) 들은 시간을 다양하게 표현할 수 있는 문법 규칙입니다.

자주 사용하는 시간 포맷 요소 표

포맷 요소의미범위
HH, HH12 12시간 형식의 시(hour) 0 ~ 12
HH24 24시간 형식의 시(hour) 0 ~ 23
MI 분(minute) 0 ~ 59
SS 초(second) 0 ~ 59
SSSSS 자정 이후 누적 초 0 ~ 86399
FF[1~9] 밀리세컨드(millisecond) 최대 9자리
AM, PM 오전/오후 시스템 언어 설정에 따라 다름
 

2. 📅 기본 날짜 및 시간 포맷 사용법

가장 기본적인 날짜 및 시간 포맷은 TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') 형태로, 날짜 + 시간(24시간) 을 표시합니다.

sql
복사편집
SELECT SYSDATE, TO_CHAR(SYSDATE, 'YYYY-MM-DD AM HH:MI:SS') AS hh12, -- 12시간제 TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS hh24 -- 24시간제 FROM dual;

실무에서는 대부분 YYYY-MM-DD HH24:MI:SS 포맷을 기본 출력 형식으로 활용합니다.


3. 🕒 HH12와 HH24의 차이점 완전 정복

시간 포맷은 12시간(HH12)24시간(HH24) 으로 구분됩니다. 아래 쿼리를 통해 두 형식의 차이를 직접 확인할 수 있습니다.

sql
복사편집
SELECT SYSDATE, TO_CHAR(SYSDATE, 'HH') AS hh, -- 12시간 TO_CHAR(SYSDATE, 'HH12') AS hh12, -- 12시간 TO_CHAR(SYSDATE, 'HH24') AS hh24, -- 24시간 TO_CHAR(SYSDATE, 'MI') AS mi, -- 분 TO_CHAR(SYSDATE, 'SS') AS ss, -- 초 TO_CHAR(SYSDATE, 'SSSSS') AS sssss, -- 자정 이후 초 TO_CHAR(SYSDATE, 'AM') AS am, -- 오전 TO_CHAR(SYSDATE, 'PM') AS pm -- 오후 FROM dual;

HH와 HH12는 사실상 동일한 표현이며, 오전/오후를 함께 출력하려면 AM, PM 포맷 요소와 같이 사용합니다. 시스템 언어에 따라 출력값이 한글(오전, 오후) 또는 영문(AM, PM)으로 다르게 나타납니다.


4. 🧮 자정 이후 초 단위 시간(SSSSS) 활용법

오라클은 자정(00:00:00)부터 현재 시간까지 경과된 초 단위 값을 SSSSS 포맷으로 제공합니다.

sql
복사편집
SELECT SYSDATE, TO_CHAR(SYSDATE, 'SSSSS') AS sssss, FLOOR(TO_CHAR(SYSDATE, 'SSSSS') / 60) AS minutes, FLOOR(TO_CHAR(SYSDATE, 'SSSSS') / 3600) AS hours, TO_CHAR(TO_DATE(TO_CHAR(SYSDATE, 'SSSSS'), 'SSSSS'), 'HH24:MI:SS') AS times FROM dual;

예를 들어, 21시 59분 39초는 자정 이후 총 77,979초가 경과한 시간입니다. 이를 활용해 시간 계산, 로그 차이 계산 등 다양한 용도로 활용 가능합니다.


5. 🌐 AM/PM 포맷 한글 또는 영문 고정 출력하기

오전/오후를 출력하는 AM, PM 포맷은 시스템의 NLS_DATE_LANGUAGE 설정에 따라 한글 또는 영문으로 출력됩니다. 하지만 명시적으로 언어를 지정할 수 있습니다.

sql
복사편집
SELECT TO_CHAR(SYSDATE, 'AM') AS ampm, TO_CHAR(SYSDATE, 'AM', 'nls_date_language=american') AS AMERICAN, TO_CHAR(SYSDATE, 'AM', 'nls_date_language=korean') AS KOREAN FROM dual;

이렇게 하면 프로그램이나 리포트에서 일관된 출력 형식을 유지할 수 있어 국제화(i18n) 대응에도 유리합니다.


6. ⏱️ 밀리세컨드 포맷(FF)으로 정밀한 시간 출력

정밀한 시간 단위를 출력하고 싶다면 SYSTIMESTAMP와 FF 포맷을 조합합니다. 밀리초(millisecond)는 FF1부터 FF9까지 최대 9자리까지 지원됩니다.

sql
복사편집
SELECT SYSTIMESTAMP, TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD HH24:MI:SS.FF') AS cur_datetime_ff, TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD HH24:MI:SS.FF3') AS cur_datetime_ff3, TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD HH24:MI:SS.FF6') AS cur_datetime_ff6, TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD HH24:MI:SS.FF9') AS cur_datetime_ff9 FROM dual;

특히 실시간 로깅 시스템, 모니터링 시스템 등에서는 소수점 단위의 시간 정확도가 요구되기 때문에 유용하게 활용됩니다.


7. 🌍 타임존 정보 출력(TZH, TZM, TZR)

SYSTIMESTAMP는 기본적으로 타임존 정보를 포함하고 있으며, 이를 포맷 요소로 추출할 수 있습니다.

sql
복사편집
SELECT SYSTIMESTAMP, TO_CHAR(SYSTIMESTAMP, 'TZH') AS tzh, -- 표준시간대 시간 TO_CHAR(SYSTIMESTAMP, 'TZM') AS tzm, -- 표준시간대 분 TO_CHAR(SYSTIMESTAMP, 'TZR') AS tzr -- 타임존 지역 FROM dual;

이 기능은 서로 다른 국가 또는 시간대를 사용하는 시스템 간 연동 시, 시간 정합성을 유지하는 데 반드시 필요합니다.


🧩 실무 활용 팁 요약

  • 로그 출력 시: TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS')
  • 밀리초까지 필요할 경우: TO_CHAR(SYSTIMESTAMP, 'HH24:MI:SS.FF3')
  • 사용자 언어 설정 무시하고 AM/PM 출력: 'nls_date_language=american'
  • 시간 간격 분석 시: SSSSS 활용 후 시/분/초 단위 변환

✅ 마무리하며

오라클에서 날짜 및 시간 포맷을 자유자재로 다룰 수 있다는 것은 단순한 SQL 지식 이상으로, 실무의 효율성을 극대화할 수 있는 무기입니다. 이 글에서 소개한 TO_CHAR, TO_DATE, 그리고 다양한 포맷 요소들의 조합을 익혀두면 로그 분석, 보고서 생성, ETL 프로세스 설계 등에서 분명 강력한 장점으로 작용할 것입니다.

시간 포맷팅이 단순히 "출력의 문제"가 아니라, 데이터 가공과 정합성 확보를 위한 중요한 수단이라는 점을 꼭 기억하시기 바랍니다.

반응형