2017-07-21 17 views
2

我使用Oracle和它做:無法轉換時間戳的時區亞洲/耶路撒冷

SELECT FROM_TZ(TIMESTAMP '2017-03-31 02:10:00', 'Asia/Jerusalem') 
    FROM DUAL; 

拋出:

01878. 00000 - "specified field not found in datetime or interval" 

但我不知道爲什麼。當天沒有時間變更,夏令時開始於2017年3月24日。任何想法?

+1

你是說真的崩潰?或者它會拋出一個錯誤? – mathguy

+0

是的,它會拋出一個錯誤,抱歉。我添加了細節。 – user8343746

+0

TZR是耶路撒冷的當天凌晨2點的小時特定的問題。 'TIMESTAMP'2017-03-31 01:59:59''就像'TIMESTAMP'2017-03-31 03:00:00'一樣正常工作。百思不得其解 – APC

回答

0

這樣看來,Oracle數據庫認爲,以色列在2017年春季前向DST轉換爲3月31日,而不是3月24日。如果時區數據文件尚未更新,則會發生這種情況。

Asia/Jerusalem區的最後修訂在TZDB版本2012H,當相關規則從Fri>=26this commit變更爲Fri>=23。因此,你的數據庫具有從TZDB釋放比2012H年長得出的數據。 2012h announcement引用此更改。

Oracle數據庫都有自己的發佈和版本控制方案對於其時區的文件,所以我不知道到底是哪甲骨文TZ數據文件的版本,這將涉及到。但是,您應該認爲始終將時區數據更新爲最新版本是一種最佳做法。訂閱tz announcements mailing list at IANA,然後在每次tzdb發佈後立即從Oracle中尋找相應的更新。

有關更新Oracle中的時區的數據信息,看in the documentation here

(我的理解是,甲骨文的時區數據文件本身只能通過甲骨文的有效支持合同。)