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
添加回答
舉報