FIND_IN_SET函数用于返回字符串str在字符串列表str_list中的位置,返回一个整数或一个NULL值
语法格式
FIND_IN_SET(str,str_list)
str: 需要查询的字符串
str_list: 需要查询的字符串列表,参数以","分隔,形式如 (1,2,6,8,10,22)
提示Tips
① 如果在 str_list 中没有找到 str,FIND_IN_SET函数返回 0
② 如果 str 或 str_list 为 NULL,FIND_IN_SET函数返回 NULL
③ 如果 str_list 是一个空字符串(""),FIND_IN_SET函数函数返回 0
示例1
-- 1
SELECT FIND_IN_SET("a", "a");
-- 3
SELECT FIND_IN_SET("c", "a,b,c,c,d");
-- 0
SELECT FIND_IN_SET("a", "s,q,l");
-- 0
SELECT FIND_IN_SET("q", "");
-- 5
SELECT FIND_IN_SET("o", "h,e,l,l,o");
-- Null
SELECT FIND_IN_SET("q", null);
-- Null
SELECT FIND_IN_SET(null, "s,q,l");
示例2
导入数据
DROP TABLE IF EXISTS `divisions`;
CREATE TABLE `divisions` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(25) NOT NULL,
`belts` varchar(200) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4;
INSERT INTO `divisions` VALUES ('1', 'O-1', 'white,yellow,orange');
INSERT INTO `divisions` VALUES ('2', 'O-2', 'purple,green,blue');
INSERT INTO `divisions` VALUES ('3', 'O-3', 'brown,red,black');
INSERT INTO `divisions` VALUES ('4', 'O-4', 'white,yellow,orange');
INSERT INTO `divisions` VALUES ('5', 'O-5', 'purple,green,blue');
INSERT INTO `divisions` VALUES ('6', 'O-6', 'brown,red');
INSERT INTO `divisions` VALUES ('7', 'O-7', 'black');
INSERT INTO `divisions` VALUES ('8', 'O-8', 'white,yellow,orange');
INSERT INTO `divisions` VALUES ('9', 'O-9', 'purple,green,blue');
INSERT INTO `divisions` VALUES ('10', 'O-10', 'brown,red');
divisions表
问题1: 查询生产皮带包含red belts的部门信息
SELECT name, belts
FROM divisions
WHERE FIND_IN_SET('red', belts);
结果展示
问题2: 查询生产皮带不包含black belts的部门信息
SELECT name, belts
FROM divisions
WHERE NOT FIND_IN_SET('black', belts);
结果展示
问题3:查找名称为O-1或O-2的部门
-- 使用FIND_IN_SET
SELECT name, belts
FROM divisions
WHERE FIND_IN_SET(name, 'O-1,O-2');
-- 使用IN运算符
SELECT name, belts
FROM divisions
WHERE name IN ('O-1','O-2');
结果展示
补充扩展知识: column IN ('x', 'y', 'z')表达式与FIND_IN_SET(column, 'x,y,z')效果相同
当你希望将值与数据库中的值列表进行匹配时,可以使用IN运算符; 当你希望将值与数据库中以逗号分隔存储的值列表进行匹配时,可以使用FIND_IN_SET函数