欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

oracle 逗号,查询oracle中逗号分隔字符串中所有值

发布时间:2023/12/20 37 豆豆
生活随笔 收集整理的这篇文章主要介绍了 oracle 逗号,查询oracle中逗号分隔字符串中所有值 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

查询oracle中逗号分隔字符串中所有值

如果一个字符串中有像逗号或其它符号分隔,你想把它折分成列,如’first field, second field , third field’,

拆成

first field

second field

third field

第一种 用10G开始支持的正则表达式

SELECT REGEXP_SUBSTR (‘first field, second field , third field’, ‘[^,]+’, 1,rownum)

FROM DUAL

CONNECT BY ROWNUM <=

LENGTH (‘first field, second field , third field’) – LENGTH (REPLACE (‘first field, second field , third field’, ‘,’, ”))

+1

————

first field

second field

third field

REGEXP_SUBSTR 函数是把那个串以正则不是以,(逗号)开头的截取,第二个参数是取第几组,rownum伪列序号,connect 循环 ,循环次数为串总长度-去除分隔符后=几个分隔符 +1

第二种用type,function

第一,先创建一个Type

CREATE OR REPLACE TYPE type_split IS TABLE OF VARCHAR2 (4000)

第二,创建函数

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;

end split;

第三,调试

select * from table(split(’aaa,bbb,ccc’,’,’))

扩展 regexp_replace

V字段中每个值中字符串以,分隔,如果不是以9开头那组串加‘00’

anbob@NCME>create table testreg(v varchar2(80));

Table created.

anbob@NCME>insert into testreg values(’911,000,12,31′);

1 row created.

anbob@NCME>insert into testreg values(’11911,554000,312,931′);

1 row created.

anbob@NCME>commit;

Commit complete.

anbob@NCME>select ltrim(regexp_replace(‘,’||v,’([,])’,'\100′),’,') newv,v from testreg;

NEWV V

—————————— ——————————

00911,00000,0012,0031 911,000,12,31

0011911,00554000,00312,00931 11911,554000,312,931

总结

以上是生活随笔为你收集整理的oracle 逗号,查询oracle中逗号分隔字符串中所有值的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。