1

秒を追加し、タイプ TIMESTAMP WITH TIMEZONE の変数を減算する必要がありますが、私の理解では、そのようなデータに数値を追加すると、タイムゾーンに関する情報が失われます。おそらく、DATE 型に変換されるためです。

あれは:

  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

ただし、INTERVAL.. 構文は char 定数を想定しているため、変数では使用できません。

タイムゾーン情報を保持しながら TIMESTAMP WITH TIME ZONE データ型でそのような演算を実行するにはどうすればよいですか?

ティア

4

1 に答える 1

3

NUMTODSINTERVAL 関数を使用して、数値を間隔に変換できます。

SELECT FROM_TZ( TIMESTAMP '2012-10-08 00:00:00','-5:00') 
  + NUMTODSINTERVAL(1,'HOUR')
FROM dual;
于 2012-09-17T23:04:26.320 に答える