入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

ORACLE(PL/SQL) 根据字符分割(SPLIT)字符串返回数组

创建时间:2015-11-28 投稿人: 浏览次数:6459

ORACLE没有提供现成的函数来进行字符串的分割,网上有很多中现实方法,本文介绍一种我自己的实现方式。主要是使用Oracle内部函数instr和substr函数的方式来实现。

CREATE OR REPLACE FUNCTION str_split(in_str VARCHAR2,in_sep VARCHAR2)
RETURN type_split
IS
   --分割字符串位置索引
   v_sep_pos PLS_INTEGER;
   --存储分割后的字符串数组
   v_str_array type_split:=type_split();
   --substr起始索引
   v_start_idx PLS_INTEGER:=1;

BEGIN
   v_sep_pos:=instr(in_str,in_sep);
   WHILE(v_sep_pos>0)
   LOOP
      v_str_array.extend;
      v_str_array(v_str_array.last):=substr(in_str,v_start_idx,v_sep_pos-v_start_idx);
      v_start_idx:=v_sep_pos+1;
      v_sep_pos:=instr(in_str,in_sep,v_start_idx);
   END LOOP;
   v_str_array.extend;
   v_str_array(v_str_array.last):=substr(in_str,v_start_idx,length(in_str)-v_start_idx+1);

   FOR i in v_str_array.first..v_str_array.last
   LOOP
       dbms_output.put_line(v_str_array(i));
   END LOOP;

   RETURN v_str_array;
END str_split;

验证测试:

SQL> set serveroutput on;
SQL> 
SQL> DECLARE
  2     v_str_array type_split;
  3  BEGIN
  4     v_str_array:=str_split("YaoMing#T-MAC#LBJ","#");
  5     FOR i in v_str_array.first..v_str_array.last
  6     LOOP
  7        dbms_output.put_line(v_str_array(i));
  8     END LOOP;
  9  END;
 10  /

YaoMing
T-MAC
LBJ
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。