我有一對不幸被錯誤地定義爲TIMESTAMP(6)
而不是TIMESTAMP(6) WITH TIME ZONE
的列。我想將這些列從舊的,錯誤的數據類型遷移到新的正確的列。最重要的是,這些值似乎是在E(S | D)T中捕獲的,我需要UTC中的值。如何在Oracle中將TIMESTAMP列更新爲TIMESTAMP WITH TIME ZONE
到目前爲止,我已經得到了最好的是:
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 05.46.29.600102000 PM -04:00
,當我想15-JUN-12 09.46.29.600102000 PM UTC
(或不過甲骨文將其格式化)數據。
我做了select dbtimezone from dual;
,它顯示我+00:00
,所以我不知道如何繼續。理想情況下,我可以在純DML中執行此操作,並根據舊日期值(我確信它們位於America/New_York時區)對其進行DST計算。
是的,我生活在一個時區是目前是4小時的偏移量,但我將Oracle配置爲默認爲UTC(或者至少我嘗試了),這就是爲什麼我提到'select dbtimezone from dual;'的輸出。我將嘗試使用'TO_CHAR'來查看是否可以使用它來更改存儲在新列中值的格式。 –