2012-02-09 82 views
4

我在Oracle數據庫表中有一列,其類型爲TIMESTAMP(6) WITH TIME ZONE。有來自不同時區的數據的數據行,一些UTC,其他時區偏移量的數據。查詢Oracle TIMESTAMP WITH TIMEZONE

有沒有一種方法可以查詢Oracle表,以便結果始終以UTC的形式返回,並且正確完成時間轉換?有沒有什麼可以完成查詢本身,或者可能改變會議?我嘗試將會話時區更改爲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

你應該能夠使用AT TIME ZONE語法

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

我猜有沒有辦法,我可以改變的會話,這樣的邏輯「AT TIME ZONE‘UTC’」是全自動的嗎? – 2012-02-10 15:54:05

+2

@StealthRabbi - 如果該列是「TIMESTAMP WITH LOCAL TIME ZONE」,則該值將被隱式轉換爲可設置爲UTC的會話時區。 'TIMESTAMP WITH TIME ZONE'會顯示在插入的任何時區,除非您使用'AT TIME ZONE'語法來轉換它。 – 2012-02-10 16:02:19

相關問題