3 回答

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊
沒(méi)有本機(jī)函數(shù)可以執(zhí)行此操作,但是您可以使用以下技巧來(lái)實(shí)現(xiàn)目標(biāo)
WHERE CONCAT(",", `setcolumn`, ",") REGEXP ",(val1|val2|val3),"

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超4個(gè)贊
MySQL函數(shù)find_in_set()只能在一組字符串中搜索一個(gè)字符串。
第一個(gè)參數(shù)是一個(gè)字符串,因此沒(méi)有辦法使它用逗號(hào)分隔的字符串解析為字符串(根本不能在SET元素中使用逗號(hào)!)。第二個(gè)參數(shù)是SET,它依次由逗號(hào)分隔的字符串表示,因此您希望find_in_set('a,b,c', 'a,b,c,d')可以正常使用,但'a,b,c'按定義它肯定無(wú)法在任何SET中找到字符串-它包含逗號(hào)。

TA貢獻(xiàn)1859條經(jīng)驗(yàn) 獲得超6個(gè)贊
您也可以使用此自定義功能
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
添加回答
舉報(bào)