1

次のクエリがあります。さまざまな地域の現在の時刻を返します。これは、テーブルV@timezone_namesにあるほとんどのリージョンで正常に機能します。しかし、このクエリは次の場合に間違った結果を返します。

  1. +4:30のタイムゾーンの違いがある「アジア/テヘラン」
  2. -4:30のタイムゾーンの違いがある「アメリカ/カラカス」

私の質問は:

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

さまざまな国の現在の時刻を確認できます-ここの都市。

4

1 に答える 1

6

オラクルは、バグを修正するため、およびタイムゾーンのルールを変更する国や地域によって導入された変更に対して、タイムゾーンファイルパッチを随時発行します。Oracleサポートノート412160.1は、使用しているタイムゾーンファイルを確認する方法と更新する方法を示しています。(チェックは10gで簡単です- SELECT version FROM v$timezone_file)。

タイムゾーンファイルバージョン14の11g未満では、カラカスで-4:30、テヘランで+4:30になり、リンク先のサイトに一致する時間が表示されます。

カラカスは2007年後半にタイムゾーンを変更したようですので、-4:00を表示していると思います。テヘランでは2008年にDSTが変更された(またはDSTが再導入された、わからない)ので、+3:30を表示していると思います。現在のタイムゾーンがこれらの変更よりも前であると想定するのは妥当なようです。デフォルトでは、10gはv3またはv4になります。

最新のタイムゾーンファイル(バージョン18)に更新することをお勧めします。状況に応じてサポートノートを確認する必要があります。具体的には、1448706.1「OracleデータベースにDSTv18アップデートを適用する」に注意してください。パッチ13417321として入手できます。最新のパッチを使用しても問題が解決しない場合は、Oracleにサービスリクエストを送信して修正することができます。

于 2012-09-17T10:41:41.713 に答える