有如下字符串   a=badfd+dfddc+ddasd+sfd 
现在要截取符号之间的字段,也就是badfd;dfddc;ddasd;sfd这四个结果,现提供一下PLSQL语言,
大侠帮助一下,修改修改
declare
v_sql  long;
i      number :=1;
j      number :=1;
begin
 
v_sql:='a=badfd+dfddc+ddasd+sfd';
loop
select  instr(v_sql,'+',1,j)  into i from dual;
j:=j+1;
exit when i=0;
dbms_output.put_line(i); 
end loop;
end;

解决方案 »

  1.   


    --这样取吧
    select regexp_substr(regexp_replace('a=badfd+dfddc+ddasd+sfd ','[a-zA-Z]+=',''), 
    '[^+]+',1,rownum) result from dual   
    connect by rownum<=length(regexp_replace('a=badfd+dfddc+ddasd+sfd ','[a-zA-Z]+=',''))
    -length(replace(regexp_replace('a=badfd+dfddc+ddasd+sfd ','[a-zA-Z]+=',''), '+', ''))+1;
    /*
    RESULT                                                                          
    ----------badfd                                                                           
    dfddc                                                                           
    ddasd                                                                           
    sfd   
    */
      

  2.   


    --按你的写法
    declare
    v_sql long;
    i number :=1;
    j number :=1;
    begin
    v_sql:='a=badfd+dfddc+ddasd+sfd';
    v_sql:=regexp_replace(v_sql,'[a-zA-Z]+=','');
    loop
    select instr(v_sql,'+',1,j) into i from dual;
    dbms_output.put_line(regexp_substr(v_sql,'[^+]+',1,j));
    j:=j+1; 
    exit when i=0;
    end loop;
    end;
    /
    /*
    badfd                                                                           
    dfddc                                                                           
    ddasd                                                                           
    sfd    
    */
      

  3.   

    regexp_replace
    regexp_substr