SQL ORACLE добавляет 1 секунду для sysdate каждые 10 строк - PullRequest
0 голосов
/ 28 июня 2018

В динамическом SQL я хотел бы добавлять 1 секунду каждые 10 строк

Следующий запрос не сработал, получил «интервал недействителен»

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 голосов
/ 28 июня 2018

Классический способ - это деление на количество секунд в дне, например,

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 
0 голосов
/ 28 июня 2018

interval <n> second принимает только буквенные числа, а не арифметические выражения.

Однако вы можете сделать это:

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

или любая другая формула, необходимая для получения правильного результата.

Обратите внимание, что если вы хотите, чтобы группы по десять строк за раз, вы должны использовать "округление вверх" (функция ceil()) и не добавлять 1 в скобках.

...