2012-02-09 8 views
4

OracleのDB表に、TIMESTAMP(6) WITH TIME ZONEの列があります。異なるタイムゾーンのデータ、UTCのデータ、その他のタイムゾーンオフセットのデータ行があります。Oracle TIMESTAMPとTIMEZONEの照会

結果が常にUTCとして戻ってくるように、Oracleテーブルをクエリできる方法はありますか?適切な時間シフトが行われていますか?クエリ自体に何かできるのか、それとも何らかの形でセッションを変更することができますか?私はUtcにセッションのタイムゾーンを変更しようとしましたが、これはCURRENT_TIMESTAMPの値に影響するようです。例えば

ALTER SESSION SET TIME_ZONE = 'Utc' 

、値は以下のように格納されていた場合:

21-JAN-10 03.28.38.635000000 PM -05:00 

クエリは、あなたがする必要があります

21-JAN-10 08.28.38.635000000 PM Utc 

例のテーブル定義

CREATE TABLE "MyDb"."Books" 
    (
    "GUID" RAW(32) DEFAULT SYS_GUID(), 
    "DATE_CREATED" TIMESTAMP (6) WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, 
); 

答えて

11

として戻ってきますを使用できる構文

SELECT column_name at time zone 'UTC' 
    FROM your_table 

すなわち

SQL> select * from foo; 

COL1 
--------------------------------------------------------------------------- 
09-FEB-12 01.48.40.072000 PM -05:00 
09-FEB-12 10.49.26.613000 AM US/PACIFIC 

SQL> select col1 at time zone 'UTC' 
    2 from foo; 

COL1ATTIMEZONE'UTC' 
--------------------------------------------------------------------------- 
09-FEB-12 06.48.40.072000 PM UTC 
09-FEB-12 06.49.26.613000 PM UTC 
+0

私は「TIME ZONE 『UTC』 AT」のロジックは自動的に行われますので、私はセッションを変更することができる方法はありません推測していますか? –

+2

@StealthRabbi - 列が 'TIMESTAMP WITH LOCAL TIME ZONE'だった場合、その値は暗黙的にUTCに設定できるセッションのタイムゾーンに変換されます。 'TIMESTAMP WITH TIME ZONE'は、' AT TIME ZONE'構文のようなもので変換しない限り、挿入されたタイムゾーンに表示されます。 –

関連する問題