orcale数组字符串分割

本文介绍了在Oracle数据库中将字符串转换为多行的三种方法:使用正则表达式和连接查询,定义类型集合及分割函数,以及嵌入函数或存储过程。每种方案都提供了具体的SQL代码示例,用于将逗号分隔的字符串拆分成单独的行。
摘要由CSDN通过智能技术生成

方案一.字符串转成多行

select regexp_substr('001,002,003,004,005,006'||',', /*参数末尾加分割符*/
                     '[^,]+',/*正则分隔符*/
                     1,
                     rownum)
from dual
connect by rownum <= length(
        regexp_replace('001,002,003,004,005,006'||',', /*参数末尾加分割符*/
                       '[^,]',/*正则分隔符*/
                       null));

方案二.定义类型集合与分割函数

/*定义 varchar2 (4000) 的 type_string_table 集合,   is table of 集合即表 */
create or replace type type_string_table is table of varchar2 (4000)


/* 分割字符串函数 */
create or replace function
    func_splitString(
    p_str varchar2, /*需分隔的字符串 eg:'123,456,789'*/
    p_sep varchar2 :=','/*分隔符*/
) return type_string_table
    pipelined is idx pls_integer;
/*
分割字符串函数
返回collection
获取参考
select * from table (cast (func_splitstring ('123,456,789', ',') as type_string_table))
*/
v_string varchar2(4000) := p_str;
begin
    loop
        idx := instr(v_string,p_sep);
        if idx>0 then
            pipe row(substr(v_string,1,idx-1));
            v_string := substr(v_string,idx+length(p_sep));
        else
            pipe row(v_string);
            exit;
        end if;
    end loop;
end func_splitString;

方案三.  嵌入函数或存储过程使用代码段

   p_str in varchar2 /*360101,360102*/
  ,p_sep in varchar2:=',' /*分隔符默认,*/
 ---------------------------------------------------------
    v_str varchar2(400) := p_str;-- 数组字符串
    v_item varchar2(400) := '';-- 数组字符串元素项
begin
    while v_str is not null loop /*非空继续循环分割*/
            if instr(v_str,p_sep)>0 then /*含有分隔符,分割*/
                v_item := substr(v_str,1,instr(v_str,p_sep)-1);
                v_str := substr(v_str,instr(v_str,p_sep)+1);
            else /* 不含分割符,直接赋值 */
                v_item:=v_str;
                v_str:=null;
            end if;
            /* 自定义使用v_item  */
        end loop;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值