oracle - 如何在 PL/SQL 中将一纳秒添加到时间戳

标签 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;

知道如何实现这个目标吗?

最佳答案

间隔日到秒文字可用于将小数秒添加到时间戳值:

在此示例中,我们添加一纳秒:

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

结果:

RES                           
-------------------------------
11-NOV-13 10.10.10.111111112 PM 

注意:当您使用 to_timestamp() 函数将字 rune 字转换为时间戳数据类型的值时,最好指定格式掩码(而不是中继 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

结果:

RES                           
-------------------------------
11-NOV-13 10.10.10.111111112 PM 

注意:当您打算使用 PL/SQL 处理时间戳数据类型的值时,您应该注意以下事项。在 PL/SQL 中,时间戳数据类型值的小数秒的默认精度是 6,而不是 SQL 中的 9,因此您可能会预期秒小数部分会被截断。为了避免截断小数秒,请使用 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;

结果:

anonymous block completed
11-11-2013 22:10:10:111111112

关于oracle - 如何在 PL/SQL 中将一纳秒添加到时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19866409/

相关文章:

mysql - 在 select 语句中设置默认值(不使用 UNION 语句)

oracle - 如何为 oracle 选择查询计时

sql - Oracle函数: How to pass a table name as parameter,并使用游标结果作为表名?

sql - Oracle SQL "column ambiguously defined"和 `FETCH FIRST n ROWS ONLY`

sql - 比较 2 个表之间的值范围

sql - 选择所有出生日期在月底的员工

sql - 如何解决错误 : ORA-01406 fetched column value was truncated?

plsql - 在 PLSQL 条件逻辑中使用子查询;错误 PLS-00405

oracle - 在过程中使用 FOR UPDATE 时应该何时提交?

sql - 在 Oracle 中使用 to_date 的查询在 Windows 和 Ubuntu IDE 中运行不同