【DM】自定义存储函数(返回字符在字符串中所在位置的下标字符串)
一、使用while语法
-- 输入: 原字符串,查找的字符,分割字符
-- 输出: 所在位置下标集合(用输入的分割字符分割)
CREATE OR REPLACE FUNCTION dF_strPosition(
strInput IN VARCHAR(100),
strFindinput IN VARCHAR(2),
strSplit IN VARCHAR(2))
RETURN VARCHAR(128)
AS
strVal varchar(128)='';
intValue int:=0;
BEGIN
set strInput=rtrim(ltrim(strInput)); ---去掉左右空格
--请注意REGEXP_INSTR 函数用法
while REGEXP_INSTR((right(strInput,len(strInput)-intValue)),strFindinput)<>0
LOOP
select REGEXP_INSTR((right(strInput,len(strInput)-intValue)),strFindinput)+intValue into intValue;
strVal :=strVal+cast(intValue as varchar(2))+strSplit;
end loop;
--最后截图字符串,从0位开始,截取到长度-1,为了去掉最后一个分割字符
strVal:=SUBSTR(strVal,0,len(strVal)-1);
return strVal;
END;
结果:
SELECT dF_strPosition('333332',3, ',')
二、使用for语法
CREATE OR REPLACE FUNCTION dF_strPosition(
original_data VARCHAR,
search_number varchar,
delimiter CHAR)
RETURN VARCHAR
AS
position varchar;
result VARCHAR ;
BEGIN
set original_data=rtrim(ltrim(original_data)); ---去掉左右空格
FOR position IN 1..LENGTH(original_data)
LOOP
IF SUBSTRING(original_data FROM position FOR 1) = search_number THEN
result := result || position || delimiter;
END IF;
END LOOP;
IF LENGTH(result) > 0 THEN
result := SUBSTRING(result FROM 1 FOR LENGTH(result)-1);
END IF;
RETURN result;
END;
结果:SELECT dF_strPosition('333332',3, ',')
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下