现在的位置: 首页 > 综合 > 正文

Oracle 拆分字符串

2014年03月17日 ⁄ 综合 ⁄ 共 1781字 ⁄ 字号 评论关闭

 

首先介绍一个函数: 

oracle instr函数介绍:

     在Oracle中,可以使用instr函数对某个字符串进行判断,判断其是否含有指定的字符。其语法为:
     instr(sourceString,destString,start,appearPosition).
    其中sourceString代表源字符串;destString代表想聪源字符串中查找的子串;start代表查找的开始位置,该参数可选的,默认为1;appearPosition代表想从源字符中查找出第几次出现的destString,该参数也是可选的,默认为1;
    如果start的值为负数,那么代表从右往左进行查找。
    返回值为:查找到的字符串的位置。

 

下面介绍拆分拆分字符串的函数 split_str:

 /*
  --首先要建立一个包存放返回的集合
  create or replace package my_type is
 
    --定义一个存放字符型变量的长度为100表变量filename_array
    type t_ret_table is table of varchar2(100);
   
  end my_type;
  */

-->SQL

  create or replace function split_str(var_str   in varchar2,
                                       var_split in varchar2)
  return my_type.t_ret_table is

  /****************************************************
  *
  ** 函数名称:split_str

  ** 参    数:【名称】         【类型 】      【说明】
  **           var_str          varchar2       要拆分的字符串
  **           var_split        varchar2       字符串分隔符
  ** 返 回 值:Result           t_ret_table    拆分后数组集合
  ** 摘    要:拆分字符串
  ****************************************************/

  var_out     my_type.t_ret_table;
  var_tmp     varchar2(4000);
  var_element varchar2(4000);

begin
  var_tmp := var_str;
  var_out := my_type.t_ret_table();
  --如果存在匹配的分割符
  while instr(var_tmp, var_split) > 0 loop
    var_element := substr(var_tmp, 1, instr(var_tmp, var_split) - 1);
    var_tmp     := substr(var_tmp,
                          instr(var_tmp, var_split) + length(var_split),
                          length(var_tmp));
    --var_out.extend(1);
    var_out.extend;
    var_out(var_out.count) := var_element;
  end loop;

  --var_out.extend(1);
  var_out.extend;
  var_out(var_out.count) := var_tmp;

  /*
    --测试
    FOR i IN 1 .. var_out.count LOOP
      dbms_output.put_line(var_out(i));
      dbms_output.put_line('字符串长度 = '|| TO_CHAR(nvl(length(var_out(i)), 0)));
      dbms_output.put_line('-----------------------------------------------');
    END LOOP;
  */
  return var_out;
end split_str;

 

 

 

抱歉!评论已关闭.