查询Oracle TIMESTAMP WITH TIMEZONE

查询Oracle TIMESTAMP WITH TIMEZONE

问题描述:

我在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, 
); 

你应该能够使用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