【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, ',')