灵活截取字符串

前章讲到的《多维度单循环模式》中提到需要使用数据库中的拼接字符串的技术,但是当拼接字符串过长且较为复杂时拆串就会非常复杂,下面通过总结封装出一个方法

这里是以Oracle为背景总结的,同理可得其他数据库

CREATE OR REPLACE FUNCTION indchar (str1 varchar2, str2 varchar2,indexs number) RETURN varchar2 AS varlen1 number;--字符串总长度 varlen2 number;--用来存储截串用的字符串的长度 i number;--用来记录字符串中每个字符串的位置的 n number;--用来记录字符串中包含几个截串用的字符串 m number;--用来记录字符串中第n个用来截串用的字符串位置 varstr1 varchar2(200);--临时存取需截取字符串中的单个字符串 varstr2 varchar2(200);--临时存取用于截串中的单个字符串 varstr3 varchar2(200);--用于存储返回字符串 BEGIN varlen1 := length(str1); varlen2 := length(str2); i := 1; n := 0; m := 0; --循环用来计算包含多少个截串用的字符串     while i<= varlen1 loop          varstr1 := substr(str1,i,1);         varstr2 := substr(str2,1,1);         if varstr1 = varstr1 then           if substr(str1,i,varlen2) = str2 then           n:= n+1;           end if;         end if;        i :=i+1;     end loop;           ------判断索引位置     if indexs <=0 then       return '';      end if;           --判断截取字符串个数     if n=0 then       return str1;     end if;         --判断索引位置    if indexs = 1 then      i:=1;      n:=0;       while i<= varlen1 loop            varstr1 := substr(str1,i,1);           varstr2 := substr(str2,1,1);           varstr3 := concat(varstr3,substr(str1,i,1));           if varstr1 = varstr2 then             if substr(str1,i,varlen2) = str2 then             n:= n+1;             return substr(varstr3,1,m-2);             end if;           end if;          i :=i+1;       end loop;      end if;     if indexs <= n+1 then     -------      i:=0;      n:=0;       while i<= varlen1 loop            varstr1 := substr(str1,i,1);           varstr2 := substr(str2,1,1);           --varstr3 := concat(varstr3,substr(str1,i,1));           if varstr1 = varstr2 then             if substr(str1,i,varlen2) = str2 then             n:= n+1;             m:= i+1;             --return substr(varstr3,1,m-2);             end if;           end if;           if n+1 = indexs then               varstr3 := concat(varstr3,substr(str1,i,1));                             end if;             if n+1 > indexs then                 return substr(varstr3,length(str2)+1,length(varstr3)-length(str2));             end if;          i :=i+1;       end loop;      -------     end if; ----获取拆分后的最后一个字符串 return substr(varstr3,length(str2)+1,length(varstr3)-length(str2)+1); END; --调用函数参数说明: --num_char(str1 varchar2,str2 varchar2,indexs number) --str1 原字符串 --str2 拆分字符串 --index 字符串个数索引

 

下面获取拆分字符串中最后一个字符串

 

--查询语句:select num_char('ws++rq++sl++dl','++',4) from dual --返回结果:dl

 原文在编程论坛:

********转载或引用需标明出处************

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zywzwz.html