自建的Oracle一个字符串截取函数split_string

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、开始位置默认为空

--------------------------------------------------------------------------------
Version 1.0
Created By Pracy.Chen 2011-11-02
Mail:pracy87@163.com


*******************************************************************************/
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;
/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值