【问题标题】:Querying Oracle TIMESTAMP WITH TIMEZONE使用 TIMEZONE 查询 Oracle TIMESTAMP
【发布时间】:2012-03-02 06:37:31
【问题描述】:

我在 Oracle DB 表中有一个类型为 TIMESTAMP(6) WITH TIME ZONE 的列。有数据行包含来自不同时区的数据,一些 UTC,一些在其他时区偏移量。

有没有一种方法可以查询 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,
);

【问题讨论】:

    标签: sql oracle timezone oracle11g


    【解决方案1】:

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

    【讨论】:

    • 我猜我无法更改会话,所以“AT TIME ZONE 'UTC'”的逻辑是自动的?
    • @StealthRabbi - 如果列是TIMESTAMP WITH LOCAL TIME ZONE,则该值将隐式转换为可以设置为 UTC 的会话时区。 TIMESTAMP WITH TIME ZONE 会在插入时使用的任何时区显示,除非您使用 AT TIME ZONE 语法之类的东西对其进行转换。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-27
    • 2010-10-09
    • 1970-01-01
    • 2012-06-21
    • 1970-01-01
    • 2021-12-26
    • 2016-04-21
    相关资源
    最近更新 更多