MySql函數判定A字符串中元素是否在B字符串中存在(A,B均爲逗號分隔字符串)

 沒啥好講的,直接上代碼。(在MySQL可視化工具中運行時如果出現報錯,請注意是否是因爲複製之後的空格編碼格式不匹配導致)

一、判定str中字符是否存在於targetStr字符串中,字符串均以逗號隔開

-- 判定str中字符是否存在於targetStr字符串中,字符串均以逗號隔開
-- @return    1 存在   ,0  不存在
DROP FUNCTION
IF
    EXISTS fun_str_findin_targetStr;
CREATE FUNCTION fun_str_findin_targetStr ( str VARCHAR ( 1024 ), targetStr VARCHAR ( 1024 ) ) RETURNS INT ( 1 ) BEGIN
    DECLARE
        `@idx` INT ( 11 ) DEFAULT 0;
    DECLARE
        `@tempStr` VARCHAR ( 255 );
    -- 默認循環從0開始
    SET @idx = 0;
    -- 獲取需要查詢字符串中存在多少個逗號分隔符
    SET @strlen = LENGTH(str)-LENGTH(REPLACE(str,",",""));
    -- 如果匹配的目標字符串本身即爲空字符串則直接返回 1,具體可根據自己業務需求做修改
    IF targetStr IS null OR targetStr="" THEN
            RETURN 1;
    ELSE
        WHILE
        -- 當循環次數小於或等於(當沒有逗號分隔符時)總長度時
                @idx <= @strlen DO
                SET @idx = @idx + 1;
            -- 截取需要匹配的字符串
                SET @tempStr = SUBSTRING_INDEX(SUBSTRING_INDEX(str,',',@idx),",",-1);
                IF
                @tempStr != '' 
                AND FIND_IN_SET( @tempStr, targetStr ) > 0 THEN
                    RETURN 1;
            END IF;
        END WHILE;
        RETURN 0;
        END IF;
END;

留幾張運行效果圖,便於參考:

補充一個判斷字符串存在已某字符爲開始的方法

CREATE  FUNCTION `fun_str_begin_tag`(str VARCHAR ( 1024 ), tag VARCHAR ( 1024 )) RETURNS int(1)
BEGIN
-- 判定str中字符串是否存在以tag開始的字符串,字符串str以逗號隔開,tag爲單個字符串
-- 主要通過 INSTR(str1,str2) 函數進行判定     str1:目標字符串   str2:做匹配的字符串
-- 例:INSTR('1234,12345','123')=1  返回 1  
-- @return    1 存在   ,0  不存在
    DECLARE
        `@idx` INT ( 11 ) DEFAULT 0;
    DECLARE
        `@tempStr` VARCHAR ( 255 );
    -- 默認循環從0開始
    SET @idx = 0;
    -- 獲取需要查詢字符串中存在多少個逗號分隔符
    SET @strlen = LENGTH(str)-LENGTH(REPLACE(str,",",""));
    -- 如果匹配的目標字符串本身即爲空字符串則直接返回 1,具體可根據自己業務需求做修改
    IF str IS null OR str="" THEN
            RETURN 1;
    ELSE
        WHILE
        -- 當循環次數小於或等於(當沒有逗號分隔符時)總長度時
                @idx <= @strlen DO
                SET @idx = @idx + 1;
            -- 截取需要匹配的字符串
                SET @tempStr = SUBSTRING_INDEX(SUBSTRING_INDEX(str,',',@idx),",",-1);
                IF
                @tempStr != '' 
                AND INSTR( tag, @tempStr ) =1 THEN
                    RETURN 1;
            END IF;
        END WHILE;
        RETURN 0;
        END IF;
END 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章