1.函数源码如下:
CREATE OR REPLACE FUNCTION fn_split1(p_str IN VARCHAR2, p_delimiter IN VARCHAR2,p_delimiter2 IN VARCHAR2)
RETURN VARCHAR2
/*******************************************
***名称:fn_split1
***参数:p_str 入参
p_delimiter
p_delimiter2
***author :by wuf 2013-06-01
***描述:截取p_str中第一次出现p_delimiter和在p_delimiter出现之后第一次出现p_delimiter2的之间的字符串
***如果在p_delimiter之后到字符串结束都没找到p_delimiter2串,则返回p_delimiter后所以的字符串
***SELECT fn_split1('2@@12345,3@@,5@@134802308','@@','@@') FROM dual ;返回:12345,3
********************************************/
IS
j INT := 0;
len INT := 0;
len1 INT := 0;
len2 INT := 0 ;
str_split VARCHAR2(100) := '';
c VARCHAR2(100) ;
BEGIN
len := LENGTH (p_str);
len1 := LENGTH (p_delimiter);
len2 := LENGTH(p_delimiter2) ;
j := INSTR(p_str,p_delimiter)+len1 ;
IF j = len1 THEN
RETURN NULL;
END if ;
IF j > len1 THEN
c := SUBSTR(p_str,j,len2);
IF c = p_delimiter2 THEN
RETURN NULL;
END if ;
LOOP
j := j + 1;
c := SUBSTR(p_str,j,len2);
IF c = p_delimiter2 THEN
str_split := SUBSTR(p_str,INSTR(p_str,p_delimiter)+len1,j-INSTR(p_str,p_delimiter)-len1);
EXIT;
END IF ;
IF j >= LEN THEN
str_split := SUBSTR(p_str,INSTR(p_str,p_delimiter)+len1);
EXIT;
END IF;
END LOOP ;
END if ;
RETURN str_split;
END fn_split1;
2.使用见函数体中注释。