web-dev-qa-db-ja.com

SQLクエリでのタイムゾーン変換

クエリを使用して、GMTとして格納されているOracle DBからアプリケーションの受信日を取得しています。今、私は取得中にこれを東部標準/夏時間に変換する必要があります。私はこれのために以下のクエリを使用しています:

   select to_char (new_time(application_recv_date,'gmt','est'), 'MON dd, YYYY') from application

標準時は問題なく動作します。しかし、夏時間のために、タイムゾーン情報に基づいてそれを「edt」に変換する必要があります。私はこれをどのように行うのか非常にわかりません。私を助けてください

9
satyanarayana

タイムゾーンの変更を気にすることなく、このクエリを使用できます。

select to_char(cast(application_recv_date as timestamp) at time zone 'US/Eastern',
               'MON dd, YYYY'
              )
from application;

例:

EDT:

select cast(date'2014-04-08' as timestamp) d1,
       cast(date'2014-04-08' as timestamp) at time zone 'US/Eastern' d2
from dual;

D1                                 D2
---------------------------------- -------------------------------------------
08-APR-14 12.00.00.000000 AM       07-APR-14 08.00.00.000000 PM US/EASTERN

EST(東部基準時:

select cast(date'2014-12-08' as timestamp) d1,
       cast(date'2014-12-08' as timestamp) at time zone 'US/Eastern' d2
from dual;

D1                                 D2
---------------------------------- -------------------------------------------
08-DEC-14 12.00.00.000000 AM       07-DEC-14 07.00.00.000000 PM US/EASTERN

更新:

タイムゾーンが指定されていない場合、ローカルタイムゾーンが変換に使用されることを思い出してくれたAlex Pooleに感謝します。

日付を強制的にGMTとして認識させるには、from_tzを使用します。

from_tz(cast(date'2014-12-08' as timestamp), 'GMT') at time zone 'US/Eastern'
10
Noel

Oracleでは、以下のクエリでこれを実現できます。

Select current_timestamp, current_timestamp at time zone 'Australia/Sydney' from dual;

どこ Australia/Sydneyは、時間を変換するタイムゾーンの名前です。

1
Jitender Kumar