从带有时区的时间戳中提取当地小时

时间:2017-12-07 10:31:57

标签: oracle oracle12c timestamp-with-timezone

我试图从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 个答案:

答案 0 :(得分:4)

检查documentation of EXTRACT(datetime)

  

从具有时区值的日期时间中提取时,返回的值为UTC。

如果您想获得当地时间,请使用TO_CHAR(tsz, 'HH24')EXTRACT(hour from cast(tsz as timestamp))