101543-国外出差审批流程 [ 0|P,106-管理员 ]                   
怎么截取 [ 后面的 或者把 [ 的全部替换 或者把 [ 删掉.                   
然后再截取  前面的ID:101543 我想要的就是前面的ID strc varchar2(500);
  --ca c_array;
  et_id2 varchar(500);
  tmpStr varchar(100);
  likeStr varchar2(500);
  template_id2 varchar(200);
begin
    strc:=et_id;
    --dbms_output.put_line(strc);
    tmpStr:='';
    likeStr:='';
    loop
        p:=instr(strc,'-',1);
        exit when p=0;
      
        tmpStr:=substr(strc,1,p-1);
        likeStr:=likeStr||','||tmpStr;
       
        p:=instr(strc,'|',1);
        exit when p=0;
        strc:=substr(strc,p+1,length(strc));
这是我写的截取前面ID 但是后来发先传过来的字符串 有的里面不只有一个 “-” 符号。
一般第二个“-”符号都出现"[ ]"里面所以要替换或则删除。oracle

解决方案 »

  1.   

    select regexp_substr('101543-国外出差审批流程 [ 0|P,106-管理员 ] ','\d+',1,1)  as userid from dual
      

  2.   

    select regexp_replace(regexp_replace(regexp_substr('101543-国外出差审批流程 [ 0|P,106-管理员 ] ','\[.+'),'\[',''),']','') from dual;
    select regexp_substr('101543-国外出差审批流程 [ 0|P,106-管理员 ] ','\d+') from dual;
      

  3.   

    如果出现多条呢?101543-国外出差审批流程 [ 0|P,106-管理员 ] |101532-国外出差审批流程 [ 0|P,106-管理员 ] |101530-国外出差审批流程 [ 0|P,106-管理员 ]这样的格式你那种方法就没办法截取了。 有可能还有10条!