我有一个带有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,
);
答案 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
现在,作为一种风格问题,我们强烈建议不要创建区分大小写的表名和列名,因为它会极大地惹恼必须维护代码的开发人员。