3 回答
TA贡献1810条经验 获得超4个赞
没有本机函数可以执行此操作,但是您可以使用以下技巧来实现目标
WHERE CONCAT(",", `setcolumn`, ",") REGEXP ",(val1|val2|val3),"
TA贡献1827条经验 获得超4个赞
MySQL函数find_in_set()只能在一组字符串中搜索一个字符串。
第一个参数是一个字符串,因此没有办法使它用逗号分隔的字符串解析为字符串(根本不能在SET元素中使用逗号!)。第二个参数是SET,它依次由逗号分隔的字符串表示,因此您希望find_in_set('a,b,c', 'a,b,c,d')可以正常使用,但'a,b,c'按定义它肯定无法在任何SET中找到字符串-它包含逗号。
TA贡献1859条经验 获得超6个赞
您也可以使用此自定义功能
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')- 1
SELECT FIND_SET_EQUALS('a,c', 'a,b,c')- 0
SELECT FIND_SET_EQUALS(null, 'a,b,c')- 0
添加回答
举报