2012-06-19 85 views
3

我有一些數據存儲在Oracle的TIMESTAMP(6) WITH TIMEZONE列中,但它存儲在錯誤的時區中。按照慣例,數據庫中的所有時間戳必須以UTC格式存儲,但此數據不正確地保留爲EDT。實際值等同於正確的UTC值;問題很簡單,它存儲爲19-JUN-12 12.20.42.000000000 PM AMERICA/NEW_YORK,而應該是19-JUN-12 16.20.42.000000000 PM UTC。在Oracle中有沒有任何的方式來改變這個?在Oracle中更改TIMESTAMP WITH TIMEZONE的時區組件

回答

6

您是否確實需要更改存儲在數據庫中的數據?通常情況下,它足以只轉換爲用於顯示不同的時區,即

SELECT <<your_timestamp_column>> AT TIME ZONE 'UTC' 
    FROM <<your table>> 

當然,如果你願意,你也可以

UPDATE <<your table>> 
    SET <<your timestamp column>> = <<your timestamp column>> AT TIME ZONE 'UTC' 

改變所有的數據。

+0

我無法控制讀取數據的任何地方,因此需要與其他地方的處理方式保持一致。謝謝你,順便說一句。你不會相信我剛剛完成原型設計來完成這個任務(我嵌套了5個模擬函數*不寒而慄*)。 –

+0

@Justin Cave-完成此更新後,插入的新數據將位於新時區還是僅更新現有數據? –

+0

@Abhishekkumar - 'UPDATE'語句只會影響現有的數據。如果您希望新插入的數據使用UTC,則需要將'timestamp'轉換爲UTC,作爲插入數據過程的一部分。 –

相關問題