codememo

EXTRACT() Hour(24시간 형식)

tipmemo 2023. 7. 17. 21:09
반응형

EXTRACT() Hour(24시간 형식)

아래와 같은 것이 있습니다.

EXTRACT(HOUR from CAST(to_char(tran_datetime,'DD-MON-YYYY HH24:MI:SS') AS TIMESTAMP))

tran_datetime이라DATEtype. 이것은 다음과 같은 일부 행에 오류를 제공합니다.HOUR must be between 1 and 12그래서 나는 그것이 Hour를 단번에 다룰 수 없다는 것을 이해합니다.24 Hour형식(또는 군 시간).아래는 (분명히) 효과가 있습니다.

EXTRACT(HOUR from CAST(to_char(tran_datetime,'DD-MON-YYYY HH:MI:SS') AS TIMESTAMP)) 

또는

EXTRACT(HOUR from CAST(tran_datetime AS TIMESTAMP))  --12 Hr format by default

사용할 수 있는 방법이 있습니까?EXTRACT()을 얻기 위해HOUR24시간 형식(예: 오후 3시 15분, 오후 1시 13분 등).

참고하시기 바랍니다.to_char(tran_datetime,'HH24')아주 명백한 옵션이지만, 저는 사용할 것을 찾고 있습니다.EXTRACT()구체적으로 기능합니다.

문제는 에 있지 않습니다.extract확실히 '군대 시간'을 처리할 수 있습니다.다음과 같은 기본 타임스탬프 형식이 있는 것 같습니다.HH대신에HH24아니면 적어도 그것이 내가 이것을 재현할 수 있는 유일한 방법입니다.

SQL> select value from nls_session_parameters
  2  where parameter = 'NLS_TIMESTAMP_FORMAT';

VALUE
--------------------------------------------------------------------------------
DD-MON-RR HH24.MI.SSXFF

SQL> select extract(hour from cast(to_char(sysdate, 'DD-MON-YYYY HH24:MI:SS')
  2  as timestamp)) from dual;

EXTRACT(HOURFROMCAST(TO_CHAR(SYSDATE,'DD-MON-YYYYHH24:MI:SS')ASTIMESTAMP))
--------------------------------------------------------------------------
                                                                        15

alter session set nls_timestamp_format = 'DD-MON-YYYY HH:MI:SS';

Session altered.

SQL> select extract(hour from cast(to_char(sysdate, 'DD-MON-YYYY HH24:MI:SS')
  2  as timestamp)) from dual;

select extract(hour from cast(to_char(sysdate, 'DD-MON-YYYY HH24:MI:SS') as timestamp)) from dual
                              *
ERROR at line 1:
ORA-01849: hour must be between 1 and 12

따라서 간단한 '수정'은 24시간을 인식할 수 있는 형식으로 설정하는 것입니다.

SQL> alter session set nls_timestamp_format = 'DD-MON-YYYY HH24:MI:SS';

Session altered.

SQL> select extract(hour from cast(to_char(sysdate, 'DD-MON-YYYY HH24:MI:SS')
  2  as timestamp)) from dual;

EXTRACT(HOURFROMCAST(TO_CHAR(SYSDATE,'DD-MON-YYYYHH24:MI:SS')ASTIMESTAMP))
--------------------------------------------------------------------------
                                                                        15

비록 당신이 그것을 필요로 하지 않지만.to_char모두:

SQL> select extract(hour from cast(sysdate as timestamp)) from dual;

EXTRACT(HOURFROMCAST(SYSDATEASTIMESTAMP))
-----------------------------------------
                                       15
select to_char(tran_datetime,'HH24') from test;

TO_CHAR(tran_datetime,'HH24')
------------------
16      

간편하고 간편한 솔루션:

select extract(hour from systimestamp) from dual;

EXTRACT(HOURFROMSYSTIMESTAMP)
-----------------------------
                           16 

언급URL : https://stackoverflow.com/questions/12916611/extract-hour-in-24-hour-format

반응형