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