问题描述
我想将某个时区中的日期转换为db时区中的日期。
现在由于某种原因,当我运行查询时,我被未知为timezone_region-
但是我能够使用这2个查询获得时区分钟和时区小时
我看到我也可以使用这些值与 “at time zone” 一起将我的日期转换为所需的时区日期。
所以我运行了查询-
从abc的时区 “-7:0” 选择强制转换 (加载 _ 时间戳作为时间戳),其中 = ;
运行完美。
但是,当我尝试在pl/sql中运行相同的东西时,我会得到一个异常。
伙计们知道为什么会这样吗
现在由于某种原因,当我运行查询时,我被未知为timezone_region-
select extract(timezone_region from systimestamp) from dual;
但是我能够使用这2个查询获得时区分钟和时区小时
SELECT EXTRACT(TIMEZONE_HOUR FROM SYSTIMESTAMP) into tz_hour FROM dual; SELECT EXTRACT(TIMEZONE_MINUTE FROM SYSTIMESTAMP) into tz_min FROM dual;
我看到我也可以使用这些值与 “at time zone” 一起将我的日期转换为所需的时区日期。
所以我运行了查询-
从abc的时区 “-7:0” 选择强制转换 (加载 _ 时间戳作为时间戳),其中
运行完美。
但是,当我尝试在pl/sql中运行相同的东西时,我会得到一个异常。
set serveroutput on; declare tz_hour varchar2(10); tz_min varchar2(10); l_output date; tz_full varchar2(20); begin SELECT EXTRACT(TIMEZONE_HOUR FROM SYSTIMESTAMP) into tz_hour FROM dual; SELECT EXTRACT(TIMEZONE_MINUTE FROM SYSTIMESTAMP) into tz_min FROM dual; tz_full := tz_hour||':'|| tz_min; dbms_output.put_line(tz_full); SELECT CAST(systimestamp at time zone tz_full AS DATE) INTO l_output from dual; dbms_output.put_line(l_output); end; / Error report - ORA-00905: missing keyword ORA-06512: at line 11 00905. 00000 - "missing keyword" *Cause: *Action:
伙计们知道为什么会这样吗
专家解答
你太复杂了。函数DBTimezone存储当前偏移量。所以你可以把这个传递给at时区表达式。
不需要先从systimetamp中提取值!
您不能提取timezone_region,因为DB是使用小时和分钟偏移创建的,而不是区域。
declare l_output date; begin select cast( systimestamp at time zone dbtimezone as date ) into l_output from dual; dbms_output.put_line( l_output ); end; / 18-JUL-2017 13:30:42
不需要先从systimetamp中提取值!
您不能提取timezone_region,因为DB是使用小时和分钟偏移创建的,而不是区域。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




