"adb'1234567'dsdls" update 后是不是要实现 adb3'1234567'dsdls
还是要通过存储过程来完成
楼主考虑下用ascii码来作为判断条件

解决方案 »

  1.   

    条件假设如我上条回贴:
    declare
    v_str varchar2(40);
    v_str varchar2(40);
    v_num int;
    begin
    v_num = 0;
    select t.a into v_str from table t;
    if(ascii(substr(v_str,v_num,1))>48 and ascii(substr(v_str,v_num,1))<57 and ascii(substr(v_str,v_num+1,1))>48 and ascii(substr(v_str,v_num+1,1))<57))
    then
    v_str2 = replace(v_str,substr(v_str,v_num,1),'3'|| substr(v_str,v_num,1));
    update t.a set t.a = v_str2 where ascii(substr(v_str,v_num,1))>48 and ascii(substr(v_str,v_num,1))<57 and ascii(substr(v_str,v_num+1,1))>48 and ascii(substr(v_str,v_num+1,1))<57)
    endif
    end
    其如果是有多条记录要操作,可以用游标,楼主试试看吧!
      

  2.   

    不好意思,发现做了件蠢事!!
    以上的代码可以使用instr()函数替换掉一部分.
      

  3.   

    haha ~~内置函数instr()不过这个东西好像是返回查找到的字符串位置,不能做替换巴?
      

  4.   

    REPLACE('string','s1','s2')
    string 希望被替换的字符或变量 
    s1 被替换的字符串
    s2 要替换的字符串好像还是有问题,因为你无法判断后面的一个'
      

  5.   

    str是你需要替换的字符窜
    select substr(str,
                  1,
                  instr(str, '''', 1, 1) - 1) || '3' ||
           substr(str,
                  instr(str, '''', 1, 1),
                  instr(str, '''', 1, 2) -
                  instr(str, '''', 1, 1)) || '3' ||
           substr(str,
                  instr(str, '''', 1, 3),
                  length(str))
      from dual