有一个表的字段ID,其值为CD20115703800,现在想要将其值顺序增加为CD20115703801、CD20115703802至CD20115703900.表如下:  id             order    sfd
CD20115703800     xxx     xxx
   .              xxx     xxx
   .              xxx     xxx
   .              xxx     xxx
CD20115703900     xxx     xxx请教各位该如何写sql?

解决方案 »

  1.   

    SELECT SUBSTR('CD20115703800',1,2) || TO_CHAR(TO_NUMBER(SUBSTR('CD20115703800',3)) + 1) FROM DUAL
      

  2.   

    SELECT SUBSTR('CD20115703800',1,2) || TO_CHAR(TO_NUMBER(SUBSTR('CD20115703800',3)) + level) FROM DUAL connect by level < 11
      

  3.   

    其实是要update 表 set id = id值(如CD20115703800)+1,使id的值为CD20115703900时停止,这个sql怎么写
      

  4.   


    select substr('CD20115703800',1,length('CD20115703800')-3)||
           to_char(substr('CD20115703800',length('CD20115703800')-2,3)+level)
      from dual
     connect by level <=100;
      

  5.   

    楼上的sql可以实现值增加了,但如何update
      

  6.   


    --变通一下么,看你的意思是插入数据没看出你想要update数据呀
    insert into table_name(id,order,sfd)
     select substr('CD20115703801',1,length('CD20115703801')-3)||
           to_char(substr('CD20115703801',length('CD20115703801')-2,3)+level)
      from dual
     connect by level <=99;
      

  7.   

    表temp有很多字段,如(vin,dd,aa,id,xxx,xxx,xxx),也是用上述吗?是否要把所有字段列出
      

  8.   


    需要,写的快了点,忘记加了
    insert into table_name(id,order,sfd,xxx,xxx,x.....)
     select substr('CD20115703801',1,length('CD20115703801')-3)||
           to_char(substr('CD20115703801',length('CD20115703801')-2,3)+level),
           xxx,xxx,xxx,xxx,xxx,x...
      from dual
     connect by level <=99;
      

  9.   

    update tb_name set id=substr(id,1,2)||to_char(substr(id,3)+1);
      

  10.   

    BenChiM888
    的执行报错。 缺失表达式
      

  11.   


    我写的只是个例子,还要根据你的要求改的,你不能直接拿过去就执行的。
    或者把你的sql粘出来 我给你改改。
      

  12.   


    insert into plan(ID,COLOR,ORDER,DATE,DATE,word)
    select substr('CD20115703801',1,length('CD20115703801')-3)||
           to_char(substr('CD20115703801',length('CD20115703801')-2,3)+level),
           ID,COLOR,ORDER,DATE,DATE,word
    from dual
     connect by level <=99;表的其它字段都有相应的值,而ID为空,类型为varchar2,需要将ID值顺序赋为最后一个不为空的ID值加1
      

  13.   


    --我有点弄明白你的意思了,写个通用的DECLARE
      MAX_ID VARCHAR2(20);
    BEGIN
      --找到最大值
      SELECT MAX(ID) INTO MAX_ID FROM PLAN;  FOR REC IN (SELECT ROWID FROM PLAN WHERE ID IS NULL ORDER BY ROWID) LOOP
        MAX_ID := SUBSTR(MAX_ID, 1, 2) ||
                  TO_NUMBER(SUBSTR(MAX_ID, 3, LENGTH(MAX_ID))) + 1;
        UPDATE PLAN SET ID = MAX_ID;
        WHERE ROWID = REC.ROWID;
      END LOOP;
      COMMIT;
    END;
      

  14.   

    这个循环需要在id等于某个值时结束,比如id最初为CD20115703801,但到CD20115703901或其它值时结束
      

  15.   

    DECLARE
      MAX_ID VARCHAR2(20);
    BEGIN
      --找到最大值
      --SELECT MAX(ID) INTO MAX_ID FROM PLAN;
      MAX_ID := 'CD20115703801';
      FOR REC IN (SELECT ROWID FROM PLAN WHERE ID IS NULL ORDER BY ROWID) LOOP
        --增加跳出循环判断
         EXIT WHEN CD20115703801 = 'CD20115703901';
        MAX_ID := SUBSTR(MAX_ID, 1, 2) ||
                  TO_NUMBER(SUBSTR(MAX_ID, 3, LENGTH(MAX_ID))) + 1;
            UPDATE PLAN SET ID = MAX_ID;
        WHERE ROWID = REC.ROWID;  END LOOP;
      COMMIT;
    END;
      

  16.   

    更新那些数据总要有个顺序吧,参照下面sql,如果不满足你的条件自己可以加排序
    UPDATE t SET ID = substr('CD20115703800',1, 2) || (substr('CD20115703800',3) + ROWNUM) WHERE ROWNUM < substr('CD20115703800',3) - substr('CD20115703900',3) + 1