[Oracle] 오라클 시간 포맷 변경 방법 (HH24:MI:SS)
- 데이터베이스/오라클
- 2024. 8. 25.
오라클 SQL에서 시간을 포맷팅 할 때 사용하는 포맷 요소는 다양한 형식을 지원한다. 아래의 표를 참고하여 시간 데이터를 다양한 형식으로 변환하여 출력하면 된다. 날짜 및 시간 포맷은 TO_CHAR, TO_DATE 함수를 사용할 때 사용하기 때문에 사용법을 정확히 익혀두면 많은 도움이 될 것이다.
형식요소 | 내용 | 범위 |
HH, HH12 | 시간 (12시간 단위) | 0 ~ 12 |
HH24 | 시간 (24시간 단위) | 0 ~ 24 |
MI | 분 | 0 ~ 59 |
SS | 초 | 0 ~ 59 |
SSSSS | 자정이후 초 단위 시간 | 0 ~ 86399 |
FF[1..9] | 밀리세컨드 표시 | 최대 9자리까지, SS.FF3 |
AM, PM | 오전, 오후 표시 |
목차 |
날짜 포맷 기본 사용법
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
TO_CHAR, TO_DATE 함수를 사용할 때 포맷 형식요소를 지정하여 포맷을 변경할 수 있다.
실무에서는 'YYYY-MM-DD HH24:MI:SS' 24시간 단위의 형식을 많이 사용한다.
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은 시스템 언어 설정에 따라서 한글 또는 영문으로 반환된다.
자정이후 초 단위 시간의 활용법
SELECT SYSDATE
, TO_CHAR(SYSDATE, 'SSSSS') AS sssss
, FLOOR(TO_CHAR(SYSDATE, 'SSSSS') / 60) AS minutes
, FLOOR(TO_CHAR(SYSDATE, 'SSSSS') / (60*60)) AS hours
, TO_CHAR(TO_DATE(TO_CHAR(SYSDATE, 'SSSSS'), 'SSSSS'), 'HH24:MI:SS') AS times
FROM dual
자정이후 초 단위 시간(SSSSS)은 0시부터 입력된 시간까지 초로 환산해서 반환한다.
(0시부터 21시 59분 39초 까지는 77,139초이다)
초로 반환되기 때문에 분, 시간 등으로 다시 변환해서 사용할 수 있다.
AM, PM 한글 영문 지정 방법
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
오전, 오후(AM, PM)는 시스템 언어 설정에 따라서 한글 또는 영문으로 반환된다.
한글 또는 영문으로 고정해서 표시하고 싶을 때는 nls_date_language를 지정하면 된다.
밀리세컨드 포맷 사용법
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.FF1') AS cur_datetime_ff1
, TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD HH24:MI:SS.FF2') AS cur_datetime_ff2
, TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD HH24:MI:SS.FF3') AS cur_datetime_ff3
, TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD HH24:MI:SS.FF4') AS cur_datetime_ff4
, TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD HH24:MI:SS.FF5') AS cur_datetime_ff5
, TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD HH24:MI:SS.FF6') AS cur_datetime_ff6
, TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD HH24:MI:SS.FF6') AS cur_datetime_ff7
, TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD HH24:MI:SS.FF7') AS cur_datetime_ff8
, TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD HH24:MI:SS.FF8') AS cur_datetime_ff9
FROM dual
FF는 6자리의 밀리초를 표시하고, FF1~FF9를 지정하면 지정한 길이만큼 밀리초를 표시한다.
SELECT SYSTIMESTAMP
, TO_CHAR(SYSTIMESTAMP, 'TZH') AS tzh --표준시간대 시간
, TO_CHAR(SYSTIMESTAMP, 'TZM') AS tzm --표준시간대 분
, TO_CHAR(SYSTIMESTAMP, 'TZR') AS tzr --표준시간대 지역
FROM dual
타임존의 시간, 분을 조회할 수 있다.