Oracle中分割字符串的方法
1. 使用 regexp_substr() 函数
1.1 方式1
- 如下:
select regexp_substr('bbb,aaa,ccc','[^,]+',1,level)as split_result from dualconnectbylevel<= length('bbb,aaa,ccc')- length(replace('bbb,aaa,ccc',','))+1;
1.2 方式2
- 如下:
select regexp_substr(replace('aaa;bbb;ccb','',';'),'[^;]+',1,level)as split_result from dual connectbylevel<= regexp_count('aaa;bb;',';')+1;
或者with
写法,如下withtempas(select'bbb,aaa,ccc'as str from dual)select regexp_substr(replace(str,',',' ,'),'[^,]+',1,level)fromtempconnectbylevel<= regexp_count(str,',')+1
1.3 注意问题(尤其是存储过程中用到,可能会入坑)
- 问题情况(可能会出现空行),如下:
- 解决问题: 上述空行不是我们所需要的,所以排除即可,如下:
select split_result,length(split_result)from(select regexp_substr(replace('aaa;bb;','',';'),'[^;]+',1,level)as split_result from dual connectbylevel<= regexp_count('aaa;bb;',';')+1)where split_result isnotnull;
2. 自定义函数
2.1 自定义类型 table
- 如下:
createorreplacetype result_split_list astableof varchar2(100);
2.2 自定义函数
2.2.1 自定义函数
- 如下:
createorreplacefunction split_strs(strs varchar2, type_split varchar2)return result_split_list pipelined is index_num pls_integer; str_list varchar2(100) := strs;beginloop index_num := instr(str_list, type_split);if index_num >0then pipe row(substr(str_list,1, index_num -1)); str_list := substr(str_list, index_num + length(type_split));else pipe row(str_list);exit;endif;endloop;return;end split_strs;
2.2.2 效果如下:
- 如下:
2.3 Oracle查看<Collection> 类型数据
- 上面的效果我们看到查看到的是<Collection> 类型,不方便查看数据,处理如下:
select*fromtable(select split_strs('aaa,bbb,ccc',',')from dual);
3.
本文转载自: https://blog.csdn.net/suixinfeixiangfei/article/details/127577820
版权归原作者 @素素~ 所有, 如有侵权,请联系我们删除。
版权归原作者 @素素~ 所有, 如有侵权,请联系我们删除。