恕我无知,我认为instr()函数好象实现不了这个功能,例如下面的语句:
select instr('1;2;3;4;','4;5;') from dual;
按楼主的要求是应该返回1,因为两边的字符都含有一个‘4’,但实际返回的却是0,所以instr()函数好象解决不了这个问题。如果可以,请写的具体些。

解决方案 »

  1.   

    Oracle 没有这样的函数,自己定义一个这样的函数:
    create or replace function is_contain( c1 varchar2, c2 varchar2)
    return number as
      pos number;
      ls varchar2(1000) := c1;
      ls2 varchar2(1000) := ';' || c2;
    begin
      if c1 is null or c2 is null then
        return 0;
      end if;
      loop
        pos := instr(ls,';');
        exit when pos is null or pos = 0;
        if instr(c2,';' || substr(ls,1,pos)) > 0 then
          return 1;
        end if;
        ls := substr(ls,pos + 1);
      end loop;
      return 0;
    end;
    /SQL> select is_contain('1;2;3;4;5;6;7;','3;6;5;4;') from dual;IS_CONTAIN('1;2;3;4;5;6;7;','3;6;5;4;')
    ---------------------------------------
                                          1SQL> select is_contain('9;8;1;','3;6;5;4;') from dual;IS_CONTAIN('9;8;1;','3;6;5;4;')
    -------------------------------
                                  0
      

  2.   

    create or replace function get_value(p1 in varchar2,p2 in varchar2)
    return number
    as
    ln1 number;
    ln2 number;
    begin
    loop
      ln1:=instr(p1,';');
      exit when nvl(ln,0)=0;
      loop
        ln2:=instr(p2,';');
        exit when nvl(ln2,0)=0;
        if substr(p2,1,ln2-1)=substr(p1,1,ln1-1) then
          return 1;
        end if;
        p2:=substr(p2,ln2+1);
      end loop;
      p1:=substr(p1,ln1+1);
    end loop;
    return 0;
    end;
    /
      

  3.   

    sorry,修改程序:
    create or replace function get_value(p1 in varchar2,p2 in varchar2)
    return number
    as
    ln number;
    begin
    loop
      ln:=instr(p1,';');
      exit when nvl(ln,0)=0;
      if instr(p2,substr(p1,1,ln-1))>0 then
        return 1;
      end if;
      p1:=substr(p1,ln+1);
    end loop;
    return 0;
    end;
    /
      

  4.   

    sorry,修改程序:
    create or replace function get_value(p1 in varchar2,p2 in varchar2)
    return number
    as
    ln number;
    begin
    loop
      ln:=instr(p1,';');
      exit when nvl(ln,0)=0;
      if instr(p2,substr(p1,1,ln-1))>0 then
        return 1;
      end if;
      p1:=substr(p1,ln+1);
    end loop;
    return 0;
    end;
    /
      

  5.   

    To beckhambobo(beckham) 
    你的不对,如果是这样的数据:
    '1;2;3;','9;10;11;'
    你的仍将会返回 1