【问题标题】:How do you add X seconds to multiple rows in SQL?如何将 X 秒添加到 SQL 中的多行?
【发布时间】:2019-01-25 16:11:23
【问题描述】:
update test1
set start_date = sysdate
where table_id between 223 and 228;

我想以 x 秒为增量更新这些日期。

所以

  • table_id 223 有 2018-08-19 09:10:15
  • table_id 224 有 2018-08-19 09:10:25
  • table_id 225 有 2018-08-19 09:10:35

类似的东西。我应该如何进行?我正在使用sql developer,并且一直在更新。我不允许在数据库上创建过程或创建另一个程序来这样做,所以我必须使用更新查询来做到这一点。有没有办法做到这一点?

【问题讨论】:

标签: sql oracle


【解决方案1】:

例如:

SQL> create table test1
  2    (table_id number,
  3     start_date date
  4    );

Table created.

SQL> insert into test1 (table_id)
  2    select 220 + level
  3    from dual
  4    connect by level <= 10;

10 rows created.

SQL> update test1 set
  2    start_date = sysdate + (10 / (24 * 60 * 60)) * rownum
  3  where table_id between 223 and 228;

6 rows updated.

SQL> select * From test1 order by table_id;

  TABLE_ID START_DATE
---------- -------------------
       221
       222
       223 19.08.2018 09:29:47
       224 19.08.2018 09:29:57
       225 19.08.2018 09:30:07
       226 19.08.2018 09:30:17
       227 19.08.2018 09:30:27
       228 19.08.2018 09:30:37
       229
       230

10 rows selected.

SQL>

在本例中,(10 / (24 * 60 * 60)) * rownum

  • 10代表增量(10秒)
  • 24 * 60 * 60 是一天中的秒数(24 小时 * 60 分钟 * 60 秒)
  • rownum 用作乘数,以便每一行都有自己的 10 秒增量

【讨论】:

    【解决方案2】:

    此查询使用'numToDSInterval()'函数将结果集的行号转换为十秒的间隔:

    update test
    set start_date = sysdate + 
                     numToDSInterval ( ((rownum-1) * 10), 'second')
    where table_id between 223 and 228
    ;    
    

    【讨论】:

      【解决方案3】:

      我会使用一些简单的数学来计算使用 ID 的每条记录的偏移量,如果它是您所说的数字(对 Oracle SQL 不熟悉),但这是一般的想法:

      UPDATE test1
         SET start_date = current_timestamp + numToDSInterval( 10 * (id - 223), 'second' )
       WHERE table_id >= 223 AND table_id <= 228
      

      【讨论】:

        【解决方案4】:

        另一种但类似的方法

        update test1 set start_date = sysdate + numToDSInterval(10 * (table_id - rownum), 'second')
        where table_id >= 223 and table_id <= 228;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-03-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-03-16
          • 1970-01-01
          • 2014-09-07
          • 2015-11-23
          相关资源
          最近更新 更多