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

mysql 专栏收录该内容
14 篇文章 0 订阅

在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的一些不足。

  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值