ORACLE行列转换之字符串拆分

本文详细介绍了在ORACLE中如何将带有分隔符的字符串转换为多行,包括使用正则表达式REGEXP_SUBSTR、简单SUBSTR、XML转换、自定义函数以及SQLLoader等方法,并进行了性能比较。自定义函数在测试中表现最快。
摘要由CSDN通过智能技术生成

ORACLE中将带分隔符的字符串拆分成多行,有很多方法,我将多种常见和不常见的拆分方法进行了收集整理。 通常这个操作被归类为行列转换的范畴。
为了方便测试,我将每一种方法封装成一个函数,返回一个字符串集合。

0.创建自定义集合类型

SQL> create type t_vchars as table of varchar2(4000);
  2  /
Type created

1.正则表达式REGEXP_SUBSTR方法

直接SQL查询逗号分隔的语句为:

SQL> select regexp_substr('男,女', '[^,]+', 1, level) as col
  2   from dual
  3   connect by level <= length('男,女')-length(REPLACE('男,女', ',', '')) + 1;
COL
------
男
女

封装成函数:

SQL> create or replace function F_SPLITSTR1
       (V_CHAR_IN VARCHAR2   --需要拆分字符串
       ,V_DELIMER VARCHAR2   --分隔符
       ) return t_vchars is
  2    FunctionResult t_vchars;
  3  begin
  4  
  5     select regexp_substr(V_CHAR_IN, '[^'||V_DELIMER||']+', 1, level) as col
  6     BULK COLLECT INTO FunctionResult
  7     from dual
  8     connect by level <= length(V_CHAR_IN)-length(REPLACE(V_CHAR_IN, V_DELIMER, '')) + 1;
  9    RETURN FunctionResult;
 10  end F_SPLITSTR1;
 11  /
Function created

SQL> select * FROM TABLE(F_SPLITSTR1('A,B,C,#D,E,F',','));
COLUMN_VALUE
--------------------------------------------------------------------------------
A
B
C
#D
E
F
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值