2017-01-22 64 views
0

當前,我正在將Oracle數據庫模式遷移到Postgres。作爲它的一部分,我必須在Oracle中轉換一個自定義實用程序功能,該功能基於時區生成時間戳。但從Oracle和Postgres獲得的價值似乎相差一個小時。oracle和postgres之間的時間戳變化

甲骨文:

SELECT (to_timestamp_tz('20300714 235959 CET','YYYYMMDD HH24MISS TZR') - to_timestamp_tz('19700101 000000 GMT','YYYYMMDD HH24MISS TZR')) 
    as foo FROM dual; 

產生22109 21:59:59.000000

的Postgres:

select ('20300714 235959'::timestamp AT TIME ZONE 'CET') - ('19700101 000000'::timestamp AT TIME ZONE 'GMT') as foo; 

產量22109天22時59分五十九秒

我g不要因爲夏令時造成這種差異的原因,但我不確定。任何人都可以幫助我解決這個問題。 我正在使用Postgres v9.6和Oracle 12c。

回答

0

那麼,我發現我正在做的錯誤。 Postgres似乎以不同的方式處理縮寫的時區名稱和完整的時區名稱。如果您想要結合日光相關的更改,則必須使用完整時區名稱。在我的情況下,使用'歐洲/阿姆斯特丹'而不是'CET'產生了與Oracle相同的結果。 要查找Postgres支持的完整時區名稱的完整列表,我使用了查詢:

select * from pg_timezone_names where abbrev='CET';