Ho una coppia di colonne che sono state purtroppo definite in modo errato come TIMESTAMP(6)
anziché TIMESTAMP(6) WITH TIME ZONE
. Mi piacerebbe migrare quelle colonne dal vecchio, datatype errato al nuovo, quello corretto. Inoltre, i valori sembrano essere stati acquisiti in E (S | D) T e ho bisogno del valore in UTC.Come aggiornare una colonna TIMESTAMP a TIMESTAMP WITH TIME ZONE in Oracle
Finora, il migliore che ho avuto è:
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;
Purtroppo, che mi lascia con i dati che assomiglia 15-JUN-12 05.46.29.600102000 PM -04:00
, quando voglio 15-JUN-12 09.46.29.600102000 PM UTC
(o comunque Oracle sarebbe formattarla).
Ho fatto select dbtimezone from dual;
e mi mostra +00:00
, quindi non sono sicuro di come procedere. Idealmente, sarei in grado di farlo in puro DML, e farlo tenere conto dell'ora legale in base ai vecchi valori di data (che sono sicuro siano nel fuso orario America/New_York).
Sì, io vivo in un fuso orario che è attualmente un offset di 4 ore, ma ho Oracle configurato per default su UTC (o almeno ho provato), motivo per cui ho menzionato l'output di 'select dbtimezone from dual;'. Sperimenterò con 'TO_CHAR' per vedere se posso usarlo per cambiare il formato del valore memorizzato nella nuova colonna. –