【发布时间】:2012-06-18 20:59:09
【问题描述】:
不幸的是,我有一对列被错误地定义为TIMESTAMP(6) 而不是TIMESTAMP(6) WITH TIME ZONE。我想将这些列从旧的错误数据类型迁移到新的正确数据类型。最重要的是,这些值似乎已在 E(S|D)T 中捕获,我需要 UTC 中的值。
到目前为止,我得到的最好的是:
alter table OOPSIE_TABLE add (
NEW_COLUMN_A timestamp(6) with time zone,
NEW_COLUMN_B timestamp(6) with time zone
);
update OOPSIE_TABLE set
NEW_COLUMN_A = COLUMN_A,
NEW_COLUMN_B = COLUMN_B
;
alter table OOPSIE_TABLE drop column (
COLUMN_A,
COLUMN_B
);
alter table OOPSIE_TABLE rename column NEW_COLUMN_A to COLUMN_A;
alter table OOPSIE_TABLE rename column NEW_COLUMN_B to COLUMN_B;
不幸的是,当我想要 15-JUN-12 09.46.29.600102000 PM UTC(或者 Oracle 会对其进行格式化)时,这给我留下了看起来像 15-JUN-12 05.46.29.600102000 PM -04:00 的数据。
我已经完成了select dbtimezone from dual;,它显示了+00:00,所以我不知道如何继续。理想情况下,我可以在纯 DML 中执行此操作,并根据旧日期值(我确定在 America/New_York 时区)将 DST 考虑在内。
【问题讨论】:
标签: oracle timezone timestamp data-migration ddl