沒啥好講的,直接上代碼。(在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