0

在动态 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;

任何人 ?谢谢 !

4

2 回答 2

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 
于 2018-06-28T17:07:04.537 回答
0

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

但是,您可以这样做:

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

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

请注意,如果您一次需要十行的组,您应该使用“四舍五入”(函数ceil())而不是在括号中添加 1。

于 2018-06-28T17:00:24.387 回答