Как обновить столбец TIMESTAMP на TIMESTAMP WITH TIME ZONE в Oracle

У меня есть пара столбцов, которые, к сожалению, были неправильно определены как 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 05.46.29.600102000 PM -04:00, когда я захочу 15-JUN-12 09.46.29.600102000 PM UTC(или, как его отформатирует Oracle).

Я сделал select dbtimezone from dual;, и он показывает мне +00:00, поэтому я не уверен, что делать дальше. В идеале я мог бы сделать это в чистом DML и учесть летнее время на основе старых значений даты (которые, я уверен, находятся в часовом поясе America/New_York).

5
задан Hank Gay 18 June 2012 в 20:59
поделиться