多字符串分割与拼接

create or replace function split_connect(split_char   in varchar2,
                                         insert_char  in varchar2,
                                         insert_char2 in varchar2,
                                         column1      in varchar2,
                                         column2      in varchar2)
  return varchar2 as
  /********************
  select split_connect(',',':',';',column1,column2) from split_table
  大刀,扫帚   2,3  ----> 大刀:2;扫帚:3
  split_char 分隔字符串(例子中的 ‘,')
  insert_char 连接字符串1(:)
  insert_char2 连接字符串2(;)
  column1 字段1 (大刀,扫帚)
  column2 字段2 (2,3)
  *********************/
  result_text  varchar2(1000);
  column1_temp varchar2(1000);
  column2_temp varchar2(1000);
begin
  column1_temp := column1;
  column2_temp := column2;
  while instr(column1_temp, split_char) > 0 loop
    if result_text is null then
      result_text := substr(column1_temp,
                            0,
                            instr(column1_temp, split_char) - 1) ||
                     insert_char ||
                     substr(column2_temp,
                            0,
                            instr(column2_temp, split_char) - 1);
    else
      result_text := result_text || insert_char2 ||
                     substr(column1_temp,
                            0,
                            instr(column1_temp, split_char) - 1) ||
                     insert_char ||
                     substr(column2_temp,
                            0,
                            instr(column2_temp, split_char) - 1);
    end if;
    column1_temp := substr(column1_temp,
                           instr(column1_temp, split_char) + 1,
                           length(column1_temp));
    column2_temp := substr(column2_temp,
                           instr(column2_temp, split_char) + 1,
                           length(column2_temp));
  end loop;
  if column1_temp is not null or length(column1_temp) > 0 then
    if result_text is null or length(result_text) = 0 then
      result_text := column1_temp || insert_char || column2_temp;
    else
      result_text := result_text || insert_char2 || column1_temp ||
                     insert_char || column2_temp;
    end if;
  end if;
  return result_text;
EXCEPTION
  WHEN OTHERS THEN
    RETURN column1_temp || insert_char2 || column2_temp;
end split_connect;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值