Mam parę kolumn, które zostały niestety niepoprawnie zdefiniowane jako TIMESTAMP(6)
zamiast TIMESTAMP(6) WITH TIME ZONE
. Chciałbym przenieść te kolumny ze starego, niewłaściwego typu danych do nowego, poprawnego. Ponadto wydaje się, że wartości zostały przechwycone w E (S | D) T i potrzebuję wartości w UTC.Jak zaktualizować kolumnę TIMESTAMP do TIMESTAMP WITH TIME STONE w Oracle
Dotychczas najlepszy mam to:
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;
Niestety, pozostawia mnie z danymi, które wygląda jak 15-JUN-12 05.46.29.600102000 PM -04:00
, kiedy chcę 15-JUN-12 09.46.29.600102000 PM UTC
(lub Oracle jednak byłoby go sformatować).
Zrobiłem select dbtimezone from dual;
i pokazuje mi +00:00
, więc nie jestem pewien, jak postępować. Najlepiej byłoby zrobić to w czystym DML i mieć konto DST w oparciu o stare wartości dat (które na pewno są w strefie czasowej America/New_York).
Tak, ja mieszkam w strefie czasowej, która jest obecnie 4-godzinne przesunięcie, ale mam Oracle skonfigurowane domyślnie do UTC (lub przynajmniej próbowałem), dlatego wspomniałem o wyjściu 'select dbtimezone from dual;'. Będę eksperymentować z 'TO_CHAR', aby sprawdzić, czy mogę użyć tego do zmiany formatu wartości przechowywanej w nowej kolumnie. –