SQL ORACLE每10行向sysdate添加1秒

时间:2018-06-28 16:55:00

标签: sql oracle sysdate

在动态SQL中,我想每10行添加1秒

以下查询无效,显示“时间间隔无效”

select 
rownum
,(round(rownum/10,0)+1)
,sysdate + interval '(round(rownum/10,0)+1)' SECOND
from anytable_with_lots_of_rows
where rownum < 100;

有人吗?谢谢!

2 个答案:

答案 0 :(得分:1)

经典方法是用一天中的秒数除以,例如

with rn as (
select rownum-1 id from dual connect by level <= 100),
rn2 as (select 
id, trunc(id/10) tr_id from rn)
select 
id, tr_id,
sysdate + tr_id / (24*3600) my_date
from rn2;

给予

        ID      TR_ID MY_DATE           
---------- ---------- -------------------
         0          0 28-06-2018 19:05:34 
         1          0 28-06-2018 19:05:34 
         2          0 28-06-2018 19:05:34 
         3          0 28-06-2018 19:05:34 
         4          0 28-06-2018 19:05:34 
         5          0 28-06-2018 19:05:34 
         6          0 28-06-2018 19:05:34 
         7          0 28-06-2018 19:05:34 
         8          0 28-06-2018 19:05:34 
         9          0 28-06-2018 19:05:34 
        10          1 28-06-2018 19:05:35 
        11          1 28-06-2018 19:05:35 
        12          1 28-06-2018 19:05:35 
        13          1 28-06-2018 19:05:35 
        14          1 28-06-2018 19:05:35 
        15          1 28-06-2018 19:05:35 
        16          1 28-06-2018 19:05:35 
        17          1 28-06-2018 19:05:35 
        18          1 28-06-2018 19:05:35

或者,如果要使用间隔,请使用函数NUMTODSINTERVAL

并用以下表达式替换除法

sysdate + NUMTODSINTERVAL(tr_id,'SECOND') my_date 

答案 1 :(得分:0)

interval <n> second仅接受文字数字,不接受算术表达式。

但是,您可以这样做:

....  + (round(rownum/10) + 1) * interval '1' second

或获取正确结果所需的任何公式。

请注意,如果要一次将十行组成一组,则应使用“四舍五入”(函数ceil()),而不要在括号中加1。