2015-11-06 75 views
0

我想將日期字段'createdate'轉換爲UTC時間,但問題是-04:00。我嘗試了一堆東西,但都沒有成功。我正在研究Oracle。有任何想法嗎?謝謝。在Oracle中將日期字段轉換爲UTC

+1

我不確定你在問什麼。 '日期'沒有時區。如果您想將它從一個時區轉換爲另一個時區,我們需要知道推斷「日期」的時區以及您想要轉換爲的時區。你似乎說你想轉換爲UTC,但你也說你想轉換爲「-04:00」。並且您不告訴我們假定日期的時區是什麼。如果您想從-4:00轉換爲UTC,只需加上4小時。 –

回答

0

這應做到:

cast(createdate as timestamp with time zone) at time zone 'UTC' 

這個createdate轉換爲時間戳與當前時區(由您的客戶端通過SESSIONTIMEZONE定義的)。然後它將其轉換爲UTC。

+0

當你從'TIMESTAMP'轉換到'TIMESTAMP WITH TIME ZONE'時,這是不完全正確的,那麼Oracle將採用你當前的本地時區,即'SESSIONTIMEZONE',而不是數據庫服務器的時區。 –

+0

@ WernfriedDomscheit謝謝,糾正(我不認爲我曾經在一個系統中的客戶端和數據庫服務器在不同的時區...) –

0

如果您有DATETIMESTAMP值,則這是不可能的,因爲這些數據類型沒有任何時區信息,因此無法將其轉換爲任何其他時區 - 除非將該值視爲「本地時區」。

有幾種解決方案:

  • createdate at time zone 'UTC'
  • SYS_EXTRACT_UTC(createdate)
  • FROM_TZ(createdate, 'UTC')

結果類型是不同的,例如FROM_TZ返回值爲TIMESTAMP WITH TIME ZONE值,而SYS_EXTRACT_UTC返回TIMESTAMP值。