mysql 查出 字符串 在 另一个字符串中是否包含

需求: list 中包含 3个字符串,
数据库存的格式为一个字段, 逗号分隔
例 List fruits = Arrays.asList(“a”, “b”, “c”);
mysql 查出 字符串 在 另一个字符串中是否包含_第1张图片
我要找出来 数据库中 name 字段 包含 list中任意 字符串 a 或 b 或 c 的

函数
FIND_IN_SET(单个字符串,字段)
缺点:只能 一次拼一个字符,并用 or 隔开

mysql 查出 字符串 在 另一个字符串中是否包含_第2张图片

解决方案:mybatis 通过for 循环 拼接

在这里插入图片描述

另一种方案:编写一个存储,让他自己去循环分割逗号,循环行去找数据。
DELIMITER //

CREATE FUNCTION find_in_set_multiple(str_list VARCHAR(255), search_str VARCHAR(255))
RETURNS INT
DETERMINISTIC
BEGIN
    DECLARE pos INT DEFAULT 1;          -- 当前查找的起始位置
    DECLARE result INT DEFAULT 0;       -- 默认返回的匹配结果false
    DECLARE current_str VARCHAR(255);   -- 当前字符串
    DECLARE comma_pos INT;              -- 逗号的位置
    DECLARE length_long INT DEFAULT 0;            -- 字符串长度
    
    -- 去除数据库中字段为空的数据
    SET length_long = ISNULL(str_list);
    IF length_long = 1  THEN
        set pos = 0;
    END IF;
    
    WHILE pos > 0 DO
        SET comma_pos = INSTR(str_list, ',');   -- 查找逗号的位置

        IF comma_pos = 0 THEN                   -- 如果没有逗号,那么字符串就是全部的字符串
            SET current_str = str_list;
            SET pos = 0;
        ELSE
            SET current_str = SUBSTRING(str_list, 1, comma_pos - 1);    -- 截取逗号之前的字符串
            SET str_list = SUBSTRING(str_list, comma_pos + 1);
        END IF;

        -- 如果当前字符串存在于搜索的字符串中,设置结果为1,结束循环
        IF FIND_IN_SET(current_str, search_str) > 0 THEN
            SET result = 1;
            SET pos = 0;
        END IF;
    END WHILE;

    RETURN result;
END //

DELIMITER ;

mysql 查出 字符串 在 另一个字符串中是否包含_第3张图片

你可能感兴趣的:(mysql,数据库)