【问题标题】:SQL ORACLE add 1 second to sysdate every 10 rowsSQL ORACLE 每 10 行添加 1 秒到 sysdate
【发布时间】:2018-06-28 16:55:00
【问题描述】:

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

有人吗?谢谢!

【问题讨论】:

  • 您的 SQL 的“动态”是什么?另外,每 10 行增加 1 秒是什么意思?您似乎希望前十行 SYSDATE + 1 秒,第 11 到 20 行的 SYSDATE + 2 秒,然后第 21 到 30 行 + 3 秒,等等?

标签: sql oracle sysdate


【解决方案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 

【讨论】:

    【解决方案2】:

    interval &lt;n&gt; second 只接受文字数字,不接受算术表达式。

    但是,您可以这样做:

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

    或任何你需要得到正确结果的公式。

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

    【讨论】:

      猜你喜欢
      • 2011-11-01
      • 2015-11-23
      • 2020-08-29
      • 1970-01-01
      • 1970-01-01
      • 2020-02-16
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      相关资源
      最近更新 更多