2012-09-03 2 views
1

초를 추가하고 TIMESTAMP와 TIMEZONE 유형의 변수를 빼야합니다. 그러나 이러한 데이터에 숫자를 추가하면 시간대 정보가 손실 될 수 있습니다. 가있는 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;