oracle 拆分逗号分隔字符串 实现split
2013-03-22 13:25
701 查看
如果一个字符串中有像逗号或其它符号分隔,你想把它折分成列,如’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
拆成
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拆分逗号分隔字符串 实现split
- oracle 拆分逗号分隔字符串 实现split
- oracle拆分逗号分隔字符串 实现split[转]
- oracle拆分逗号分隔字符串 实现split
- oracle拆分逗号分隔字符串 实现split
- oracle拆分逗号分隔的字符串
- oracle 逗号分隔的字符串列字段查询列出多条记录
- Oracle 实现拆分列数据的split()方法
- [DB][ORACLE]逗号分隔列转行的实现方法
- Oracle SQL符号分隔的多行字符串拆分
- 实现Oracle的字符串分割(split)[摘录]
- 查询oracle 中逗号分隔字符串中所有值
- oracle 将逗号分隔的字符串转成多行记录
- 从textarea中空格、逗号、换行转换为逗号分隔的字符串 js string.split
- 【Java面试题】17 如何把一个逗号分隔的字符串转换为数组? 关于String类中split方法的使用,超级详细!!!
- ORALCE中将逗号分隔的字符串拆分按条显示
- Oracle逗号分隔列转行实现方法
- C++拆分字符串代码(实现split)
- Oracle字符串拼接方法(以逗号分隔)
- oracle 存储过程 字符串分隔 FUNC_GETSPLITSTR