文字列のセグメンテーションと抽出
分割
作成 または 交換する 機能Get_StrArrayLength ( av_str VARCHAR2、 - スプリット文字列に av_split VARCHAR2 - 区切り文字 ) を返す 数 IS lv_str VARCHAR2(1000 ;) lv_length 番号; 開始 :lv_strを= LTRIM(RTRIM (av_str)); lv_length:=を0 ; 一方 InStr関数(lv_str、av_split)<> 0 ループ lv_length:=lv_length + 1 ; lv_str:= SUBSTR(lv_str、INSTR(lv_str、av_split)+ 長さ(av_split)、長さ(lv_str))。 エンドループ; lv_length:= lv_length + 1 。 リターンlv_length。 終了 Get_StrArrayLengthを。
エキス
作成 または 交換する 機能をGet_StrArrayStrOfIndex ( av_str VARCHAR2、 - スプリット文字列に av_split VARCHAR2、 - 区切り av_index 数 - 最初のいくつかの要素を取る ) を返す VARCHAR2は IS lv_str VARCHAR2(1024 ); lv_strOfIndex VARCHAR2(1024 ); lv_length 数; 始める lv_str:= LTRIM(RTRIM(av_str))。 lv_str:=連結(lv_str、av_split)。 lv_length:= av_index。 もし lv_length = 0 次いで lv_strOfIndex:= SUBSTR(lv_str、1、INSTR(lv_str、av_split)- 長さ(av_split))。 他 lv_length:= av_index + 1 ; lv_strOfIndex:= SUBSTR(lv_str、INSTR(lv_str、av_split、1、av_index)+長さ(av_split)、INSTR(lv_str、av_split、1、lv_length)- INSTR(lv_str、av_split、1、av_index)- 長さ(av_split)) ; 終了し た場合、 返す lv_strOfIndexを。 終了 Get_StrArrayStrOfIndexを。
「文字列を指定して」スプリットに「対象文字列」、および結果のテーブル構造を返します
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。
参考文献:
https://www.cnblogs.com/telwanggs/p/9248082.html