oracle中使用split拆分字符串,并且判断字符串是否在数据库中存在

oracle语句实现一个字符串如“aa,bb”,是否包含在数据库表中的一个字段的内容中

该字段中可能存有的记录如下,如(p113字段):

p113

aa,bb,cc

aa,bb,cc,dd

aa,cc

bb,dd

语句如下:

select v from (select column_value v from table(split('aa,bb')))
where not exists(
select 1 from tem_propertie w where p113 is not null and instr(w.p113,v)>0  )

注:1)split方法

在Types文件夹下新建一类型,语句:

create or replace type type_split as table of varchar2(4000);   

在Functions文件夹下新建一方法,语句:

代码
create or replace function split

(

    p_list 
varchar2,

    p_sep 
varchar2 := ','

)   
return type_split pipelined

 
is

    l_idx   pls_integer;

    v_list   
varchar2(50) := p_list;

begin

    loop

       l_idx :
= instr(v_list,p_sep);

       
if l_idx > 0 then

           
pipe row(substr(v_list,1,l_idx-1));

           v_list :
= substr(v_list,l_idx+length(p_sep));

       
else

           
pipe row(v_list);

           
exit;

       
end if;

    
end loop;

    
return;

end split;

 

然后就可以使用split('aa,bb')调用方法

2)INSTR(源字符串, 目标字符串, 起始位置, 匹配序号)

INSTR('CORPORATE FLOOR','OR', 3, 2)中,源字符串为'CORPORATE FLOOR', 目标字符串为'OR',起始位置为3,取第2个匹配项的位置

select substr(field1,instr(field1, '|', 1, rownum) + 1, 
instr(field1, '|', 1, rownum + 1) - instr(field1, '|', 1, rownum) - 1) as field2 
  from (select '|' || 'a|bbb|cccc|ddddd|ee|d|a' || '|' as field1 from dual) connect by instr(field1, '|', 2, rownum) > 0;

结果:a、bbb、cccc、ddddd、ee、d、a

posted @ 2010-03-24 12:19  aisoon99  阅读(2235)  评论(0)    收藏  举报