在mysql中,有时我们在查询时,需要得到某字段中包含某个值的记录,但是使用like可能查到我们不想要的记录,此时mysql的FIND_IN_SET函数就派上用场了,下面来看一个例子。
创建表并插入语句:
CREATE TABLE users(
id int(6) NOT NULL AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
language VARCHAR(50) NOT NULL, -- 语言特长
PRIMARY KEY (id)
);
INSERT INTO users(name, limits) VALUES('张三','英语,普通话');
INSERT INTO users(name, limits) VALUES('王五','英语四级,普通话,日语');
INSERT INTO users(name, limits) VALUES('赵六','普通话,日语,英语');
INSERT INTO users(name, limits) VALUES('李四','英语四级,普通话二级,日语四级');
我要查询普通话等级没有写明的人 用like查询无法准确查找到结果,用find_in_set可以准确查询
select * from users where find_in_set('普通话',language);
则只会查询到language以逗号分隔,然后其中包含普通话的记录。而用like查询会查询到包含普通话这个字符串的所有结果,不够准确
总结:mysql字符串函数 find_in_set(str1,str2)函数是返回str2中str1所在的位置索引(索引值从1开始),str2必须以","分割开。like是广泛的模糊匹配,字符串中没有分隔符,Find_IN_SET 是精确匹配,字段值以英文”,”分隔,Find_IN_SET查询的结果要小于like查询的结果。