2012-09-03 172 views
1

但是,我需要添加類型爲TIMESTAMP WITH TIMEZONE的秒和substract變量,但是,根據我的理解,向此類數據添加數字會導致關於時區的信息丟失,這可能是因爲它轉換爲DATE類型ORACLE SQL:將時間添加到帶時區的時間戳

即:

SELECT FROM_TZ(
      TO_TIMESTAMP( 
      TO_DATE('03/09/2012 2:30:30','DD/MM/YYYY HH:MI:SS') 
      ) 
     , 'America/Chicago') 
     FROM DUAL; 

給出:

03/09/2012 00:00:00, -05:00 

然後

SELECT FROM_TZ(
      TO_TIMESTAMP( 
      TO_DATE('03/09/2012 2:30:30','DD/MM/YYYY HH:MI:SS') 
      ) 
     , 'America/Chicago') + 1/24 -- add 1 hour 
     FROM DUAL; 

給人

03/09/2012 01:00:00 

,失去時區信息。 但

SELECT FROM_TZ(
    TO_TIMESTAMP( 
     TO_DATE('03/09/2012 2:30:30','DD/MM/YYYY HH:MI:SS')) 
     , 'America/Chicago') + INTERVAL '1' hour 

    FROM DUAL; 

正確給

03/09/2012 01:00:00,000000000 -05:00 

然而,間隔..語法想到一個字符常量,所以我不能使用與變量。

如何在保留時區信息的同時使用TIMESTAMP WITH TIME ZONE數據類型執行這種算術?

TIA

回答

3

可以使用NUMTODSINTERVAL函數將數字轉換爲一個區間。

SELECT FROM_TZ(TIMESTAMP '2012-10-08 00:00:00','-5:00') 
    + NUMTODSINTERVAL(1,'HOUR') 
FROM dual;