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 数据类型执行这种算术?

TIA

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 回答