Oracle - split split string of segmentation function

String segmentation and extraction

Split

create or replace function Get_StrArrayLength
(
  av_str VARCHAR2 ,   - to split string 
  av_split VARCHAR2   - delimiter 
)
 return  Number 
IS 
  lv_str VARCHAR2 ( 1000 );
  lv_length number;
begin
  lv_str:=ltrim(rtrim(av_str));
  lv_length:=0;
  while instr(lv_str,av_split)<>0 loop
     lv_length:=lv_length+1;
     lv_str:=substr(lv_str,instr(lv_str,av_split)+length(av_split),length(lv_str));
  end loop;
  lv_length:=lv_length+1;
  return lv_length;
end Get_StrArrayLength;

extract

create or replace function Get_StrArrayStrOfIndex
(
  av_str VARCHAR2 ,   - to split string 
  av_split VARCHAR2 ,   - delimiter 
  av_index Number  - take the first few elements 
)
 return  VARCHAR2 
IS 
  lv_str VARCHAR2 ( 1024 );
  lv_strOfIndex varchar2 ( 1024 );
  lv_length number;
begin
  lv_str:=ltrim(rtrim(av_str));
  lv_str: = concat (lv_str, av_split);
  lv_length: = av_index;
  if lv_length = 0  then 
      lv_strOfIndex: = substr (lv_str, 1 , instr (lv_str, av_split) - length (av_split));
  else 
      lv_length: = av_index + 1 ;
     lv_strOfIndex: = substr (lv_str, instr (lv_str, av_split, 1 , av_index) + length (av_split), instr (lv_str, av_split, 1 , lv_length) - instr (lv_str, av_split, 1 , av_index) - length (av_split)) ;
  end  if ;
  return   lv_strOfIndex;
end Get_StrArrayStrOfIndex;

The "target character string" to "specify the string" split, and returns the results table structure

CREATE OR REPLACE TYPE str_split IS TABLE OF VARCHAR2 (4000);
CREATE OR REPLACE FUNCTION splitstr(p_string IN VARCHAR2, p_delimiter IN VARCHAR2)
    RETURN str_split 
    PIPELINED
AS
    v_length   NUMBER := LENGTH(p_string);
    v_start    NUMBER := 1;
    v_index    NUMBER;
BEGIN
    WHILE(v_start <= v_length)
    LOOP
        v_index := INSTR(p_string, p_delimiter, v_start);

        IF v_index = 0
        THEN
            PIPE ROW(SUBSTR(p_string, v_start));
            v_start := v_length + 1;
        ELSE
            PIPE ROW(SUBSTR(p_string, v_start, v_index - v_start));
            v_start := v_index + 1;
        END IF;
    END LOOP;

    RETURN;
END splitstr;

 

References:

https://www.cnblogs.com/telwanggs/p/9248082.html

Guess you like

Origin www.cnblogs.com/jeremywucnblog/p/12356887.html