如何在PL/SQL中为时间戳添加一纳秒

Win*_*ter 3 oracle plsql oracle11g

我试图在timestamp没有任何运气的情况下为变量添加纳秒.

这是示例代码:

DECLARE
  lts_nextTimestamp TIMESTAMP = TO_TIMESTAMP('11-11-2013 22:10:10:111111111');
  ;
BEGIN
  lts_nextTimestamp := lts_nextTimestamp + 1 / (10000000*60*60*24)
END;
Run Code Online (Sandbox Code Playgroud)

知道我怎么能做到这一点?

Nic*_*nov 8

interval day to second literal可用于将小数秒添加到时间戳值:

在这个例子中,我们添加一纳秒:

select timestamp '2013-11-11 22:10:10.111111111' + 
       interval '0 00:00:00.000000001' day to second(9) as res
  from dual
Run Code Online (Sandbox Code Playgroud)

结果:

RES                           
-------------------------------
11-NOV-13 10.10.10.111111112 PM 
Run Code Online (Sandbox Code Playgroud)

注意:当您使用to_timestamp()函数将字符文字转换为时间戳数据类型的值时,最好指定格式掩码(而不是NLS设置上的中继).

select TO_TIMESTAMP('11-11-2013 22:10:10:111111111', 'dd-mm-yyyy hh24:mi:ss:ff9') + 
       interval '0 00:00:00.000000001' day to second(9) as res
  from dual
Run Code Online (Sandbox Code Playgroud)

结果:

RES                           
-------------------------------
11-NOV-13 10.10.10.111111112 PM 
Run Code Online (Sandbox Code Playgroud)

注意:当您打算使用PL/SQL处理时间戳数据类型的值时,您应该了解以下内容.PL/SQL中时间戳数据类型值的小数秒的默认精度为6,而不是SQL,因此您可能希望截断小数秒.为了避免截断小数秒使用timestamp_unconstraineddsinterval_unconstrained数据类型而不是timestampinterval day to second:

declare
  l_tmstmp timestamp_unconstrained := to_timestamp('11-11-2013 22:10:10:111111111',
                                                   'dd-mm-yyyy hh24:mi:ss:ff9');
  l_ns     dsinterval_unconstrained :=  interval '0.000000001' second;
begin
  l_tmstmp := l_tmstmp + l_ns;
  dbms_output.put_line(to_char(l_tmstmp, 'dd-mm-yyyy hh24:mi:ss:ff9'));
end;
Run Code Online (Sandbox Code Playgroud)

结果:

anonymous block completed
11-11-2013 22:10:10:111111112
Run Code Online (Sandbox Code Playgroud)

  • 稍微短一点的方法是:`interval'0.000000001'second`. (2认同)