Tôi có một cặp cột không may được xác định không chính xác là TIMESTAMP(6)
thay vì TIMESTAMP(6) WITH TIME ZONE
. Tôi muốn di chuyển các cột từ cũ, sai datatype mới, chính xác một. Ngày đầu đó, các giá trị dường như đã được chụp trong E (S | D) T và tôi cần giá trị trong UTC.Cách cập nhật cột TIMESTAMP thành TIMESTAMP WITH TIME ZONE trong Oracle
Cho đến nay, là tốt nhất tôi nhận được là:
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;
Thật không may, rằng lá tôi với dữ liệu mà trông giống như 15-JUN-12 05.46.29.600102000 PM -04:00
, khi tôi muốn 15-JUN-12 09.46.29.600102000 PM UTC
(hoặc tùy ý Oracle sẽ định dạng nó).
Tôi đã thực hiện select dbtimezone from dual;
và nó hiển thị cho tôi +00:00
, vì vậy tôi không chắc chắn cách tiếp tục. Lý tưởng nhất, tôi sẽ có thể làm điều này trong DML tinh khiết, và nó có tài khoản cho DST dựa trên các giá trị ngày cũ (mà tôi chắc chắn là trong múi giờ Mỹ/New_York).
Vâng, tôi đang sống trong một múi giờ đó là hiện tại là một sự bù đắp 4 giờ, nhưng tôi đã cấu hình Oracle để mặc định thành UTC (hoặc ít nhất là tôi đã thử), đó là lý do tại sao tôi đã đề cập đầu ra của 'select dbtimezone from dual;'. Tôi sẽ thử nghiệm với 'TO_CHAR' để xem liệu tôi có thể sử dụng điều đó để thay đổi định dạng của giá trị được lưu trữ trong cột mới hay không. –