暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle Substr,to_char给出与实际时间相差1小时

ASKTOM 2019-06-12
589

问题描述

你好,

1) 当我们执行以下查询时:

with rws as (
  (SELECT (FROM_TZ(CAST(sysdate AS TIMESTAMP), 'Europe/Paris') AT TIME ZONE
 (select nvl(timezone,'Europe/Paris') date1 from dim.nloqt_top_sit_d where sit = 'KE' )) sysd   FROM DUAL)
)Select sysd from rws;  

Result :   
12-JUN-19 08.26.33.000000000 AM AFRICA/CASABLANCA 


2) 当我们将Substr,to_char或to_date函数添加到sysd时,结果相差1小时。

with rws as (
  (SELECT (FROM_TZ(CAST(sysdate AS TIMESTAMP), 'Europe/Paris') AT TIME ZONE
 (select nvl(timezone,'Europe/Paris') date1 from dim.nloqt_top_sit_d where sit = 'KE' )) sysd   FROM DUAL)
)
select substr(sysd,1,18) from rws;  

Result: 
12-JUN-19 07.29.12


谁能解释为什么我们的结果相差一个小时?

专家解答

抱歉,我无法重现substr效果:

alter session set nls_timestamp_tz_format = 'DD-MON-YY HH24:MI:SS TZR';

with rws as (
  select from_tz (cast (sysdate as timestamp),'Europe/Paris') 
           at time zone 'Europe/Paris' sysd1,
         from_tz (cast (sysdate as timestamp),'Europe/Paris') 
           at time zone 'AFRICA/CASABLANCA' sysd2
  from   dual
)
select sysd1, substr(sysd1,1,18), 
       sysd2, substr(sysd2,1,18)
from   rws;

SYSD1                             SUBSTR(SYSD1,1,18)   SYSD2                                  SUBSTR(SYSD2,1,18)   
13-JUN-19 15:41:13 EUROPE/PARIS   13-JUN-19 15:41:13   13-JUN-19 14:41:13 AFRICA/CASABLANCA   13-JUN-19 14:41:13    


我的猜测: 巴黎和卡萨布兰卡相隔一小时。因此,由于某种原因,查询返回不同时区的日期。
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论