//列子
p_str:aaaa^1111^sfsdf^
p_flag :^

create or replace function string_split(p_str in out varchar2,
p_flag in varchar2
)
return varchar2 is
v_str varchar(3000);
v_locate integer;
/*
Released by : Jackie
Last Release : 2007-10-22
Version : 2.01
*/
begin
v_str := ltrim(rtrim(p_str, p_flag), p_flag);

v_locate := instr(v_str, p_flag, 1, 1);

if v_locate = 0 then
p_str := null;
return(v_str);

end if;

p_str := substr(v_str, v_locate + 1, length(v_str));

return(substr(v_str, 1, v_locate - 1));

end string_split;
评论
心似海 2008-05-08
呵呵谢谢各位,我是想让他成为一个通用的东西,以后在编写存储过程时,可以直接用,就当成如同SQL自己提供的函数,例如就象,tostring()
qiuyuanshan 2008-04-22
用函数跑得会比较慢。。。不如再来个表像二楼说的1:N

想了想,写成下面这样貌视应该也行吧 

substr(rtrim(p_str,p_flag),1,instr(p_str||p_flag,p_flag,1,1)-1),

例子:
select substr(rtrim('123^12431','^'),1,instr('123^'||'^','^',1,1)-1) from dual
armorking 2008-04-22
明明A、B两个字段是1:N关系,
用两张主从关系的表来描述,非常轻松
却偏偏要把N个B用间隔符连接起来,硬是要把∑B和A塞到同一张表里
于是,这张表的维护和查询都变得极为痛苦
发表评论

提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则

您还没有登录,请登录后发表评论

心似海
搜索本博客
博客分类
最近加入圈子
存档
最新评论