论坛首页 入门讨论版 其他综合

一个截取字符串的方法

浏览 249 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2008-04-22
//列子
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-04-22
明明A、B两个字段是1:N关系,
用两张主从关系的表来描述,非常轻松
却偏偏要把N个B用间隔符连接起来,硬是要把∑B和A塞到同一张表里
于是,这张表的维护和查询都变得极为痛苦
   
0 请登录后投票
最后更新时间: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
   
0 请登录后投票
最后更新时间:2008-05-08
呵呵谢谢各位,我是想让他成为一个通用的东西,以后在编写存储过程时,可以直接用,就当成如同SQL自己提供的函数,例如就象,tostring()
   
0 请登录后投票
论坛首页 入门讨论版 其他综合

跳转论坛:
JavaEye推荐