2012-09-17 34 views
1

我有以下查询。它返回不同地区的当前时间。它适用于表V @ timezone_names中的大多数区域。但这种查询将返回错误的结果:与+4Oracle是否正确地为所有地区管理时区?

  1. '亚洲/德黑兰:30时区差异
  2. '美国/加拉加斯' 与-4:30时区差异

我的查询是:

select CAST(FROM_TZ(CAST(current_date AS TIMESTAMP) 
        , sessiontimezone) 
      AT TIME ZONE 'America/Caracas' AS DATE) 
    from dual; 

你可以看到在不同的国家,城市here当前时间。

回答

6

Oracle不时发布时区文件补丁以纠正错误以及由各国和地区引入的更改,以更改其时区的规则。 Oracle支持笔记412160.1显示了如何检查您拥有哪个时区文件以及如何更新。 (检查很简单,在10g - SELECT version FROM v$timezone_file)。

在带时区文件版本14的11g下,我得到了加拉加斯的-4:30和德黑兰的+4:30,显示了与您链接的网站匹配的时间。

看起来像加拉加斯changed its timezone在2007年底,所以我想你显示-4:00;德黑兰在2008年有DST变化(或者说reintroduced DST,不确定),所以我猜你会显示+3:30。假设您当前的时区早于这些更改似乎是合理的;默认情况下10g将在v3或v4上。

我建议你更新到最新的时区文件(版本18);您需要查看该支持说明以了解如何根据您的具体情况执行此操作,或者更具体地说,请注意1448706.1“为Oracle数据库应用DSTv18更新”。您可以将它作为修补程序13417321获得。如果在使用最新修补程序时仍然遇到问题,则可以使用Oracle提出服务请求以修复它。

相关问题