ORACLE(PL/SQL) 根據字元分割(SPLIT)字串返回陣列
阿新 • • 發佈:2019-02-17
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