我有以下查询。它返回不同地区的当前时间。它适用于表V@timezone_names中的大多数区域。但是这个查询返回错误的结果:
- "亚洲/德黑兰",时差为+4:30
- "美洲/加拉加斯"时差为-4:30
我的查询是:
select CAST(FROM_TZ( CAST(current_date AS TIMESTAMP)
, sessiontimezone)
AT TIME ZONE 'America/Caracas' AS DATE)
from dual;
你可以在这里看到不同国家和城市的当前时间。
Oracle不时发布时区文件修补程序,以纠正错误以及国家和地区更改时区规则所带来的更改。Oracle支持说明412160.1显示了如何检查您拥有的时区文件以及如何更新。(10g-SELECT version FROM v$timezone_file
中的检查很简单)。
在11g以下,时区文件版本为14,加拉加斯为-4:30,德黑兰为+4:30,显示与您链接的网站匹配的时间。
加拉加斯似乎在2007年末改变了时区,所以我猜你显示的是-4:00;德黑兰在2008年改变了夏令时(或者重新引入夏令时,不确定),所以我猜你显示的是+3:30。假设你当前的时区早于这些变化似乎是合理的;默认情况下,10g将在v3或v4上。
我建议您更新到最新的时区文件(版本18);您需要查看该支持说明,了解如何针对您的情况进行操作,或者更具体地说,请参阅1448706.1,"为Oracle数据库应用DSTv18更新"。你可以获得它的补丁13417321。如果您在使用最新的修补程序时仍然发现问题,那么您可以向Oracle提出服务请求以将其修复。