【find_in_set】SQL中查找某个特定字符串出现在指定字段(N子链)中的位置

在mysql数据库中,我们会经常用到in语法,用来查找某个字段包含N子链中的一个或多个字符串,如:

select  *  from  table  where   id in('1,2,3,4'); 

但如果某个字段本身是存储的N子链,然后需要查出其中拥有某个特定值呢?这种需求在数据分发中经常出现。
比如说有这么一个表:
在这里插入图片描述
见名知义,其中tags代表文章的标签,分别用数字1,2,3,4……来代表文章的标签,如php,mysql,js,java等,一篇文章可能会有多个标签,那么怎么来查找特定标签呢?如果用like,那么可能会存在查询错误的情况(比如实际要匹配的是1,结果查出来10、11、21等),这个时候就需要用到find_in_set了。

select * from article where find_in_set(1,tags)

这个SQL会返回tags字段中包含字符串’1’的所有记录。

find_in_set(str,strlist)
str表示想要查找的字符串
strlist表示需要匹配的字段,存储形如1,2,3,…或a,b,c,…这样的N子链
函数返回的是str字符串在strlist中出现的位置

*说明:find_in_set与in在作用上有一定的交集,而且in可以有效使用索引,所以效率会更高,所以在能满足需求的情况下,尽量使用in,但find_in_set能补充in的一些不足。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值