MySQL find_in_set与多个搜索字符串

我发现find_in_set仅按单个字符串搜索:


find_in_set('a', 'a,b,c,d')

在上面的示例中,“ a”是唯一用于搜索的字符串。


有什么方法可以使用find_in_set类型的功能并通过多个字符串进行搜索,例如:


find_in_set('a,b,c', 'a,b,c,d')

在上面的示例中,我想通过三个字符串'a,b,c'进行搜索。


我看到的一种方法是使用OR


find_in_set('a', 'a,b,c,d') OR find_in_set('b', 'a,b,c,d') OR find_in_set('b', 'a,b,c,d')

除此之外,还有其他方法吗?


浮云间
浏览 4720回答 3
3回答

慕莱坞森

没有本机函数可以执行此操作,但是您可以使用以下技巧来实现目标WHERE CONCAT(",", `setcolumn`, ",") REGEXP ",(val1|val2|val3),"

GCT1015

MySQL函数find_in_set()只能在一组字符串中搜索一个字符串。第一个参数是一个字符串,因此没有办法使它用逗号分隔的字符串解析为字符串(根本不能在SET元素中使用逗号!)。第二个参数是SET,它依次由逗号分隔的字符串表示,因此您希望find_in_set('a,b,c', 'a,b,c,d')可以正常使用,但'a,b,c'按定义它肯定无法在任何SET中找到字符串-它包含逗号。

BIG阳

您也可以使用此自定义功能CREATE FUNCTION SPLIT_STR(  x VARCHAR(255),  delim VARCHAR(12),  pos INT)RETURNS VARCHAR(255)RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),       LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1),       delim, ''); DELIMITER $$    CREATE FUNCTION `FIND_SET_EQUALS`(`s1` VARCHAR(200), `s2`  VARCHAR(200))     RETURNS TINYINT(1)    LANGUAGE SQL    BEGIN          DECLARE a INT Default 0 ;            DECLARE isEquals TINYINT(1) Default 0 ;          DECLARE str VARCHAR(255);          IF s1 IS NOT NULL AND s2 IS NOT NULL THEN             simple_loop: LOOP                 SET a=a+1;                 SET str= SPLIT_STR(s2,",",a);                 IF str='' THEN                    LEAVE simple_loop;                 END IF;                 #Do  check is in set                 IF FIND_IN_SET(str, s1)=0 THEN                    SET isEquals=0;                     LEAVE simple_loop;                 END IF;                 SET isEquals=1;            END LOOP simple_loop;          END IF;        RETURN isEquals;    END;    $$    DELIMITER ;SELECT FIND_SET_EQUALS('a,c,b', 'a,b,c')- 1SELECT FIND_SET_EQUALS('a,c', 'a,b,c')- 0SELECT FIND_SET_EQUALS(null, 'a,b,c')- 0
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

MySQL