Oracle 中字符串转换为数组的函数方法

本文介绍了一个用于在SQL环境中将字符串按照指定参数进行拆分的自定义函数实现,包括函数定义、核心逻辑及测试用例演示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


CREATE OR REPLACE TYPE splitArray AS TABLE OF VARCHAR2(2048);
--------字符串拆分函数
CREATE OR REPLACE FUNCTION fu_split_Array (     
str IN VARCHAR2,--输入的字符串     
split_param IN VARCHAR2 --拆分的参数
) 
RETURN splitArray        IS    split_array 
 splitArray := splitArray();--定义拆分数组   
 t_temp VARCHAR2(2048);   
 t_begin number :=0;--循环变量开始参数    
t_end number := 1;--截取字符长度的开始位置结束参数    
t_length number :=0;--字符串的长度    
t_paramLength number :=0;--传入字符串截取参数的长度 
BEGIN   
t_length := length(str);--获取传入字符的长度   
t_paramLength := length(split_param);--截取参数的长度   
--在temp 变量中查找 split_param 检索当前 split_param字符串的位置 如果没有找到则返回0     
WHILE  t_begin < t_length  
LOOP       
dbms_output.put_line('截取='||t_begin); --起始位置从1开始截取匹配split_param字符串并返回他所在的位置       
t_begin := instr(str,split_param,t_end);        
/* IF t_begin = 0 THEN           
Dbms_Output.put_line('见到了');             
t_begin := t_length;             
t_temp := SUBSTR (str, t_end);             
split_array.extend;             
split_array (split_array.count) := str;             
IF t_end >= t_length             
THEN              
Dbms_Output.put_line('见到了11111111111');                 
EXIT;             
END IF;         
ELSE*/         
--判断当前是否长度超出原字符串长度 如果超出则不执行             
IF t_end >= t_length             
THEN              
--Dbms_Output.put_line('见到了11111111111');                 
EXIT;             
END IF;             
t_temp := SUBSTR(str,t_end,t_begin-t_end);
--dbms_output.put_line(t_temp);             
t_end := t_begin+t_paramLength;             
split_array.extend;             
split_array(split_array.count) := t_temp;         
/*END IF;*/       
END LOOP;     
RETURN split_array; 
END fu_split_Array;

--测试

SELECT fu_split_Array('A,B,C,D,E,',',') FROM DUAL;





 


备注 :如果你的字符串最后一位含有分隔符例如“,”之类的标示 则使用红色未注释部分

如果你的字符串最后一位没有标记 则使用橘色注释部分代码 则返回所有的字符串你就需要重新截取最后一位了目前

我只了解这些 还在测试阶段 完善了全部黏贴出来 谢谢!希望对您有帮助!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值