【问题标题】:How to update TIMESTAMP WITH TIME ZONE columns with value of particular zone?如何使用特定区域的值更新 TIMESTAMP WITH TIME ZONE 列?
【发布时间】:2015-02-05 07:12:36
【问题描述】:

我的表中有一个 TIMESTAMP WITH TIME ZONE 列。 我想在各自的时区使用 systimestamp 更新所有值。

我尝试了很多方法,但我无法从值中动态获取时区信息并在单个查询中更新。

我将在这里提供必要的结构。

create table TIMEZONE_TEST
( COLUMN_ONE timestamp with time zone
);

insert into TIMEZONE_TEST values (systimestamp at time zone 'US/Pacific');
insert into TIMEZONE_TEST values (systimestamp at time zone 'Asia/Tokyo');
insert into TIMEZONE_TEST values (systimestamp at time zone 'Asia/Kuala_Lumpur');
insert into TIMEZONE_TEST values (systimestamp at time zone 'Asia/Singapore');
commit;

我需要使用特定时区的 systimestamp 更新所有值。

类似

update TIMEZONE_TEST
set COLUMN_ONE = systimestamp at time zone '<TIMEZONE_NAME of the value>';

提前感谢您的帮助。

【问题讨论】:

    标签: sql oracle timezone


    【解决方案1】:

    我不确定我是否正确地回答了您的问题,但我认为应该是这个问题:

    UPDATE TIMEZONE_TEST SET 
    COLUMN_ONE = FROM_TZ(CAST(SYSTIMESTAMP AS TIMESTAMP), EXTRACT(TIMEZONE_REGION FROM COLUMN_ONE));
    

    【讨论】:

    • 提供的查询会在服务器时区插入 systimestamp 以及前一个值的时区信息。但是我需要在之前值的 TIMEZONE 处插入 SYSTIMESTAMP。即在插入期间,HH:MI 值不同,但是在运行查询后,所有 HH:MI 都相同。
    • UPDATE TIMEZONE_TEST SET COLUMN_ONE = SYSTIMESTAMP at time zone EXTRACT(TIMEZONE_REGION FROM COLUMN_ONE); 适用于我的场景。就是答案。谢谢@Wernfried
    【解决方案2】:

    要求的答案是

    UPDATE TIMEZONE_TEST
    SET COLUMN_ONE = SYSTIMESTAMP at time zone EXTRACT(TIMEZONE_REGION FROM COLUMN_ONE);
    

    我修改了@Wernfried 给出的答案。

    【讨论】:

      猜你喜欢
      • 2023-01-10
      • 1970-01-01
      • 2012-04-04
      • 2013-02-20
      • 2020-09-20
      • 2011-03-14
      • 1970-01-01
      • 2021-03-23
      • 2019-12-31
      相关资源
      最近更新 更多