oracle本身自带许多了函数,但是在实际的工作中,这些函数是远远不够用,因此自定义一些函数往往使代码的执行效率更高!
需求:取出字符串'0001 1 dfds 13528221 dgdfkgdf'中第3个标识符(这个里面标识符是一个空格' ')和第4个标识符之间的字符串
create or replace function strfind
(cs in varchar2, --字符串
bs in varchar2,--标示符
x in number, --想要取到字符串部分的第1个标示符是第几个标识符
y in number) --想要取到字符串部分的第2个标示符是第几个标识符,与前者相连
return varchar2 is
z varchar2(20);
m number;
n number;
p number;
begin
--返回第1个标志符所在的位置
select instr(cs,bs,1,x) into m from dual;
--返回第2个标志符所在的位置
select instr(cs,bs,1,y) into n from dual;
--取得字符串z的长度
p:=n-m-1;
select substr(cs,m+1,p) into z from dual;
return(z);
end strfind;
(cs in varchar2, --字符串
bs in varchar2,--标示符
x in number, --想要取到字符串部分的第1个标示符是第几个标识符
y in number) --想要取到字符串部分的第2个标示符是第几个标识符,与前者相连
return varchar2 is
z varchar2(20);
m number;
n number;
p number;
begin
--返回第1个标志符所在的位置
select instr(cs,bs,1,x) into m from dual;
--返回第2个标志符所在的位置
select instr(cs,bs,1,y) into n from dual;
--取得字符串z的长度
p:=n-m-1;
select substr(cs,m+1,p) into z from dual;
return(z);
end strfind;
------测试及返回结果
需求:取出字符串'0001 1 dfds 13528221 dgdfkgdf'中第3个标识符(这个里面标识符是一个空格' ')和第4个标识符之间的字符串
---------------------------------
select strfind('0001 1 dfds 13528221 dgdfkgdf',' ',3,4) from dual
查询结果:
---------------------------------
13528221
说明:定义的参数bs最好是单个字符,可以根据实际情况对程序改动