2017-12-07 8 views
1

timestamp with time zone에서 현지 시간을 추출하려고하는데이 데이터 형식을 처음 사용하기 때문에 예기치 않은 결과가 발생합니다.타임 스탬프가 포함 된 시간대에서 시간대를 추출합니다.

아래의 모든 행에 대해 22을 출력으로 예상했습니다.

with my_data as(
    select to_timestamp_tz(ts, 'yyyy-mm-dd hh24:mi:ss tzh:tzm') as tsz 
    from (select '2017-12-07 22:23:24 +' || lpad(level, 2, '0') || ':00' as ts 
      from dual connect by level <= 10 
     )  
) 
select dbtimezone 
     ,sessiontimezone 
     ,tsz 
     ,extract(hour from tsz) 
    from my_data; 

enter image description here

는 왜 이런 일이 일어나는가, 무엇이 내가 시간대와 타임 스탬프에서 로컬 시간을 추출하려면 어떻게해야합니까?

답변

1

확인 documentation of EXTRACT(datetime) :

시간대 값을 가진 날짜에서 추출, 반환 된 값은 UTC입니다.

현지 시간을 받으려면 TO_CHAR(tsz, 'HH24') 또는 EXTRACT(hour from cast(tsz as timestamp))을 사용하십시오.