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

 

posted @ 2024-02-04 14:44  喝了烫嘴的水  阅读(26)  评论(0编辑  收藏  举报