[Mysql] FIND_IN_SET函数

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函数

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值