本文共 1327 字,大约阅读时间需要 4 分钟。
FIND_IN_SET(str, strlist)
是一个MySQL函数,用于检查字符串 str
是否存在于由逗号分隔的字符串列表 strlist
中。如果存在,函数返回该字符串在列表中的位置(从1开始计数);否则返回0。此外,若 strlist
为空或 str
不在其中,则返回0。如果 str
或 strlist
为NULL,则返回NULL。
str
。以下测试表用于比较两种函数:
CREATE TABLE `test` ( `ID` int(11) NOT NULL, `LIST` varchar(255) DEFAULT NULL);INSERT INTO `test` VALUES ('1', 'AA,BB,CC');INSERT INTO `test` VALUES ('2', 'AA,BB');INSERT INTO `test` VALUES ('3', 'AA');
SELECT id, list, 'FIND_IN_SET字段' AS '结果' FROM TEST WHERE FIND_IN_SET('AA', list);
SELECT id, list, 'FIND_IN_SET常量条件为真' AS '结果' FROM TEST WHERE FIND_IN_SET('AA', 'AA,BB,CC');
SELECT id, list, 'FIND_IN_SET常量条件为假' AS '结果' FROM TEST WHERE FIND_IN_SET('BB', 'AA,BB,CC');
文章表中 type
字段存储多个类型值,例如 1,3,4
。我们可以使用 FIND_IN_SET
检查是否包含特定类型。
SELECT * FROM article WHERE FIND_IN_SET('4', type);
部门树中,某节点的所有子节点需要匹配当前节点或其父节点。可通过 FIND_IN_SET
检查 ancestors
字段中的父ID或自身ID。
SELECT dept_id FROM sys_dept WHERE dept_id = 100 OR FIND_IN_SET(100, ancestors);
FIND_IN_SET
函数在数据处理和查询优化中具有显著优势,尤其适用于需要精确匹配字符串列表的场景。与 IN
运算符相比,其灵活性和适用性更强,适合复杂的字段值匹配需求。
转载地址:http://vsbfk.baihongyu.com/