Oracle字符串截取函数split_string(自建函数)

发布时间:2020-05-07编辑:脚本学堂
分享一个oracle数据库自定义的字符串截取函数split_string,学习下oracle中split函数的创建方法,有需要的朋友做个参考。

oracle中实现的一个截取字符串的方法:split_string
oracle 数据库字段按照拼音首字母排序

代码:
 

复制代码 代码示例:

create or replace function split_string(p_expression IN VARCHAR2 ,p_split_flag IN VARCHAR2,p_length IN INTEGER,p_start_point IN INTEGER,p_number IN INTEGER)
RETURN VARCHAR2 IS
v_result VARCHAR2(200);
v_length INTEGER;
v_start_point INTEGER;
v_number INTEGER;
v_temp varchar2(200);
t_num INTEGER;
/*********
根据设定的分界符,截取字符串中出现的第几个分界符后指定长度的字符串内容
输入参数:
       p_expression  varchar2  被截取的字符串、
       p_split_flag  varchar2  分界符、
       p_length      INTEGER   截取的字符串长度
       p_start_point INTEGER   开始位置
       p_number      INTEGER   从开始位置开始出现的第几个分界符

返回结果:
       v_result      varchar2  返回结果,截取出字符串

注意点:
       1、被截取的字符串不能为空
       2、分解符可以为空格
       3、截取长度和第几个分解符需要给出值,默认为1
       4、开始位置默认为空
BEGIN
     t_num :=0;
     v_length :=0;
     v_start_point :=0;
     v_number :=0;
     --处理参数
     IF trim(p_expression) is null THEN
        v_result:='';
        RETURN v_result;
     END IF;
    
     IF p_length is null OR p_length = 0 THEN
        v_length:= 1;
     ELSE
        v_length:=p_length;
     END IF;
    
     IF p_number is null OR p_number = 0 THEN
        v_number:= 1;
     ELSE
        v_number:=p_number;
     END IF;
    
     IF p_split_flag = p_expression OR p_split_flag is null THEN
        v_result:= p_expression;
        RETURN v_result;
     END IF;
     IF p_start_point is null THEN
        v_start_point:= 1;
     ELSE
        v_start_point:=p_start_point;
     END IF;

     select instr(p_expression,p_split_flag,v_start_point,v_number) into t_num from dual;
    
     IF t_num = 0 THEN
        v_result := '';
        RETURN v_result;
     END IF;
       
    
     select substr(p_expression,t_num+1,v_length) into v_temp from dual;

     IF trim(v_temp)is null THEN
        v_result:=' ';
     ELSE
        v_result:=v_temp;
     END IF;

     RETURN v_result;

EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN ' ';
WHEN OTHERS THEN
-- Consider logging the error and then re-raise
return ' ';
END split_string;
/