oracle中分割字符串,split,regexp_substr

oracle中没有split函数,可以自定义,也可以使用regexp_substr来实现:

根据逗号分割字符串,返回一个table
自定义split
create or replace type type_split as table of varchar2(50);
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;
使用regexp_substr
with temp as
 (select 'a,,c,,' as str from dual)
select regexp_substr(replace(str, ',', ' ,'), '[^,]+', 1, level)
  from temp
connect by level <= regexp_count(str, ',') + 1

regexp_count:统计字符出现次数

根据逗号分割字符串,返回第N个

有些字符串不规则,先将,替换成 空格+, 截取返回空格后,再trim去掉

with temp as
 (select 'a,,c,,' as str from dual)
select trim(regexp_substr(replace(str,',',' ,'),'[^,]+',1,1)) from temp 
union all 
select trim(regexp_substr(replace(str,',',' ,'),'[^,]+',1,2)) from temp 
union all 
select trim(regexp_substr(replace(str,',',' ,'),'[^,]+',1,3)) from temp 
union all 
select trim(regexp_substr(replace(str,',',' ,'),'[^,]+',1,4)) from temp 
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值