需求:A表中column1字段存儲字符串,字符串為多個元素根據逗號拼接而成,需搜索出包含某元素的數據
建立存儲過程:
CREATE DEFINER=`roots`@`%` FUNCTION `NewProc`(str1 text,str2 text) RETURNS text CHARSET utf8mb4 BEGIN #傳入兩個逗號分割的字符串,判斷第二個字符串是否包含第一個字符串split之后的單個 DECLARE CURRENTINDEX INT;#當前下標 DECLARE CURRENTSTR text; DECLARE result int; set result = 0; set CURRENTINDEX = 0; set CURRENTSTR = ''; IF str1 IS NOT NULL AND str1 != '' THEN SET CURRENTINDEX = LOCATE(',',str1); WHILE CURRENTINDEX > 0 DO SET CURRENTSTR = substring(str1,1,CURRENTINDEX-1); if FIND_IN_SET(CURRENTSTR,str2) THEN set result = 1; end if; SET str1 = substring(str1,CURRENTINDEX+1); SET CURRENTINDEX = LOCATE(',',str1); END WHILE; #只傳一個 和 最后無逗號的情況 IF LENGTH(str1) > 0 THEN if FIND_IN_SET(str1,str2) THEN set result = 1; end if; END IF; END IF; RETURN result; END
使用:select * from table_A where NewProc('param', column1);