为了账号安全,请及时绑定邮箱和手机立即绑定

MySQL find_in_set与多个搜索字符串

MySQL find_in_set与多个搜索字符串

浮云间 2019-10-09 17:48:19
我发现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'进行搜索。我看到的一种方法是使用ORfind_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')除此之外,还有其他方法吗?
查看完整描述

3 回答

?
慕莱坞森

TA贡献1810条经验 获得超4个赞

没有本机函数可以执行此操作,但是您可以使用以下技巧来实现目标


WHERE CONCAT(",", `setcolumn`, ",") REGEXP ",(val1|val2|val3),"


查看完整回答
1 反对 回复 2019-10-09
?
GCT1015

TA贡献1827条经验 获得超4个赞

MySQL函数find_in_set()只能在一组字符串中搜索一个字符串。


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


查看完整回答
反对 回复 2019-10-09
?
BIG阳

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


查看完整回答
反对 回复 2019-10-09
  • 3 回答
  • 0 关注
  • 4719 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信