亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 4772 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號