更新Oracle表记录时区值

时间:2012-02-13 18:18:45

标签: sql timezone timestamp oracle11g

我有一个带有TIMESTAMP(6)WITH TIME ZONE的Oracle列的表。该表包含不同时区的记录。我想将表的所有记录更新为UTC。是否有建议的方法在UPDATE查询中执行此操作?我查看了Oracle方法to_date(),它用于将字符串转换为日期,而from_tz()则将时间转换为带时区的时间。

似乎我需要一种方法来运行查询并从字段中提取时区,然后以某种方式更新字段以将其置于UTC中。我不想简单地改变时区名称,我想要缩短时间,所以

21-JAN-10 03.28.38.713000000 PM -05:00

会变成

21-JAN-10 08.28.38.713000000 PM UTC

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

1 个答案:

答案 0 :(得分:1)

您应该可以执行类似

的操作
UPDATE "Books"
   SET date_created = date_created at time zone 'UTC'

会做这样的事情

SQL> create table foo( col1 timestamp with time zone );

Table created.

SQL> insert into foo values( current_timestamp );

1 row created.

SQL> select * from foo;

COL1
---------------------------------------------------------------------------
13-FEB-12 01.38.42.372000 PM -05:00

SQL> update foo
  2     set col1 = col1 at time zone 'UTC';

1 row updated.

SQL> select * from foo;

COL1
---------------------------------------------------------------------------
13-FEB-12 06.38.42.372000 PM UTC

现在,作为一种风格问题,我们强烈建议不要创建区分大小写的表名和列名,因为它会极大地惹恼必须维护代码的开发人员。