2015-06-09 92 views
0

我正在使用oracle數據庫。 每個表都有一個creationdate和lastmodified字段。 lastmodified是時區的實際時間(UTC + 1 +夏令時,如果需要的話),而creationdate是同一時間,但在UTC + 0時,在夏季時間相差2小時,否則爲1小時。 有沒有更改創建日期的方法,以便在需要時使用utc + 1 +夏令時?由於Oracle數據庫和時區

+1

這些列的數據類型以及它們是如何填充的? –

+0

它是Date類型的,我不知道它們是如何填充的,但每次發送請求時,當我創建一個新行時,字段creationdate都會更新,並且只是更新時,lastmodified會更新,它是自動的,也許它是由oracle完成的,或者它可能在其他地方配置,不知道。 – NeS

回答

0

您可以使用此一:

ALTER SESSION SET TIME_ZONE = 'Europe/Zurich'; 
SELECT 
    TO_TIMESTAMP_TZ(TO_CHAR(creationdate,'yyyymmddhh24miss"UTC"'), 'yyyymmddhh24missTZR') AT LOCAL AS creationdate_local_TIMESTAMP, 
    CAST(TO_TIMESTAMP_TZ(TO_CHAR(creationdate,'yyyymmddhh24miss"UTC"'), 'yyyymmddhh24missTZR') AT LOCAL AS DATE) AS creationdate_local_DATE 
FROM your_table; 

您必須會話時區設置你的區域像上面。如果您使用靜態值(例如ALTER SESSION SET TIME_ZONE = '+02:00';),它將無法正常工作。

重要提示:如果您更新轉換時間值的表,那麼你必須確保你不這樣做幾次,因爲每次更新時間將由1或2小時一次又一次地移動。

+0

我試過了,結果我有2個字段:creation_local_timestamp和creation_local_date。兩者都有我想要的時間,但是當我查看我的creationdate字段的值時,它仍然是相同的,就像沒有任何事情發生一樣。我正在尋找一個解決方案來更新已經存在的創建日期,但是對於每一個新行,creationdate也會與這個時區匹配,就像lastmodified已經做的那樣 – NeS