时间:2023-10-31来源:系统城装机大师作者:佚名
如下:
1 2 3 4 |
select regexp_substr( 'bbb,aaa,ccc' , '[^,]+' , 1, level ) as split_result from dual connect by level <= length( 'bbb,aaa,ccc' ) - length( replace ( 'bbb,aaa,ccc' , ',' )) + 1; |
如下:
1 2 3 |
select regexp_substr( replace ( 'aaa;bbb;ccb' , '' , ';' ), '[^;]+' , 1, level ) as split_result from dual connect by level <= regexp_count( 'aaa;bb;' , ';' ) + 1; |
或者 with
写法,如下
1 2 3 4 5 |
with temp as ( select 'bbb,aaa,ccc' as str from dual) select regexp_substr( replace (str, ',' , ' ,' ), '[^,]+' , 1, level ) from temp connect by level <= regexp_count(str, ',' ) + 1 |
问题情况(可能会出现空行),如下:
解决问题:
上述空行不是我们所需要的,所以排除即可,如下:
1 2 3 4 5 |
select split_result,length(split_result) from ( select regexp_substr( replace ( 'aaa;bb;' , '' , ';' ), '[^;]+' , 1, level ) as split_result from dual connect by level <= regexp_count( 'aaa;bb;' , ';' ) + 1) where split_result is not null ; |
如下:
1 | create or replace type result_split_list as table of varchar2(100); |
如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
create or replace function split_strs(strs varchar2, type_split varchar2) return result_split_list pipelined is index_num pls_integer; str_list varchar2(100) := strs; begin loop index_num := instr(str_list, type_split); if index_num > 0 then 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; end if; end loop; return ; end split_strs; |
如下:
上面的效果我们看到查看到的是<Collection> 类型,不方便查看数据,处理如下:
1 | select * from table ( select split_strs( 'aaa,bbb,ccc' , ',' ) from dual); |
到此这篇关于Oracle中分割字符串的方法的文章就介绍到这了
2023-10-31
Oracle如何编写一个sqlldr实例2023-10-31
Oracle的SQLLDR用法简介2023-10-31
Oracle中的高效SQL编写PARALLEL解析1.Oracle数据库系统结构概述 2.Oracle数据库存储结构 物理存储结构 控制文件 数据文件 重做日志文件 归档日志文件 Oracle数据库逻辑结构 数据块(Data Block) (盘)区(Extent) 段(Segment) 表空间(Tablespace) 本地管...
2023-10-31
windows下的Oracle19c 一、官网下载Oracle19c数据库 二、安装Oracle数据库 1.解压安装包 2.运行setup.exe安装 三、配置 四、安装完Oracle数据库,给scott用户解锁 1.解决Oracle数据库中没有scott账户的问题 2.给scott...
2023-10-31