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;
/