在oracle中写一个自定义的函数,实现split分割字符串的效果

问题:

       在oracle中没有split这个函数,但是我们可能会经常分割字符串,这时,我们可以写一个自定义的函数,实现split分割字符串的效果。

解决方法:

create or replace type varchartype as table of varchar2(200);  
-- 创建一个table类型,用于接受分割下来的字符串
-- 创建函数
create or replace function fun_split(str varchar2) return varchartype
is
       strs varchartype:=varchartype();   --声明一个strs名字为varchartype的table类型
       v_i number(2):=1;     --记录我是第几个,
       v_begin number(2):=1; --截取字符串的开始
       v_index number(2):=0; --查找字符(如,等)的索引      
begin
     loop
       v_index:=instr(str,',',1,v_i);
       strs.extend;          --手动扩展strs的下标    
       
       if v_index=0 then     --当查找的字符位置为0时即为未找到,直接取字符串即可
         strs(v_i):=substr(str,v_begin);
         exit;
       end if;
       strs(v_i):=substr(str,v_begin,v_index-v_begin);    --找到时,找截取字符串的规律
       v_begin:=v_index+1;      --为下一次截取字符串的开始位置赋值
       v_i:=v_i+1;           --为查找下一个字符的位置赋值
     end loop;
     
     return strs;            --返回截取后的字符集
end;

测试:

select fun_split('a,b,c,d,aa,bb,cc,dd') from dual;

在oracle中写一个自定义的函数,实现split分割字符串的效果

在oracle中写一个自定义的函数,实现split分割字符串的效果

补充:如果要把这个字符集当做一列去使用时还需要进行转换

select * from table(fun_split('20,30'));

这样,就可以把分割的结果集当成一列来使用。