MySQL中find_in_set函数的使用

news2025/7/19 9:00:39

1.语法

FIND_IN_SET(str,strlist)

(1)str 要查询的字符串
(2)strlist 字段名; 参数以”,”分隔 如 (1,2,6,8)
查询字段(strlist)中包含(str)的结果,返回结果为null或记录

假如字符串str在由N个子链组成的字符串列表strlist 中,则返回值的范围在 1 到 N 之间。 一个字符串列表就是一个由一些被 ‘,’ 符号分开的子链组成的字符串。如果第一个参数是一个常数字符串,而第二个是type SET列,则FIND_IN_SET() 函数被优化,使用比特计算。 如果str不在strlist 或strlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为 NULL。这个函数在第一个参数包含一个逗号(‘,’)时将无法
(3)例子
①mysql> SELECT FIND_IN_SET(‘b’, ‘a,b,c,d’);-> 2
因为b 在strlist集合中放在2的位置 从1开始
②select FIND_IN_SET(‘2’, ‘1,2’); 返回2
③select FIND_IN_SET(‘6’, ‘1’); 返回0

2.find_in_set()和in的区别

在这里插入图片描述
以上表为例,我们想查找list中包含‘daodao’的数据
(1)原来以为mysql可以进行这样的查询:
SELECT id,name,list from tb_test WHERE ‘daodao’ IN(list); – (一)
在这里插入图片描述
实际上这样是不行的,这样只有当list字段的值等于’daodao’时(和IN前面的字符串完全匹配),查询才有效,
否则都得不到结果,即使’daodao’真的在list中。
(2)正确的写法如下:
SELECT id,NAME,LIST FROM tb_test WHERE ‘daodao’ IN (‘abc’,‘daodao’); – (二)
(3)这两条到底有什么区别呢?为什么第一条不能取得正确的结果,而第二条却能取得结果。
原因其实是(一)中 (list) list是变量, 而(二)中 (‘abc’, ‘daodao’)是常量。
(4)所以如果要让(一)能正确工作,需要用find_in_set():
SELECT id,name,list from tb_test WHERE FIND_IN_SET(‘daodao’,list); – (一)的改进版
在这里插入图片描述
总结:
所以如果list是常量,则可以直接用IN, 否则要用find_in_set()函数。

3.find_in_set()和like的区别

在mysql中,有时我们在做数据库查询时,需要得到某字段中包含某个值的记录,但是它也不是用like能解决的,使用like可能查到我们不想要的记录,它比like更精准,这时候mysql的FIND_IN_SET函数就派上用场了,下面来看一个例子。

在这里插入图片描述
以上表为例:
其中limits表示用户所拥有的权限(以逗号分隔),现在想查询拥有权限编号为2的用户
(1)如果用like关键字的话,则查询结果如下:
SELECT * FROM users WHERE limits LIKE ‘%2%’;
在这里插入图片描述
这样第二条数据不具有权限’2’的用户也查出来了,不符合预期。
(2)下面利用mysql 函数find_in_set()来解决:
SELECT * FROM users WHERE FIND_IN_SET(2,limits);
在这里插入图片描述
这样就能达到我们预期的效果,问题就解决了!

①注意:mysql字符串函数 find_in_set(str1,str2)函数是返回str2中str1所在的位置索引,str2必须以","分割开。
②总结:like是广泛的模糊匹配,字符串中没有分隔符,Find_IN_SET 是精确匹配,字段值以英文”,”分隔,Find_IN_SET查询的结果要小于like查询的结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/8105.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5G无线技术基础自学系列 | 物理上行控制信道

素材来源:《5G无线网络优化实践》 一边学习一边整理内容,并与大家分享,侵权即删,谢谢支持! 附上汇总贴:5G无线技术基础自学系列 | 汇总_COCOgsta的博客-CSDN博客 PUCCH用于传输上行控制信息(U…

岭回归、Lasso回归和弹性网络

减少过拟合的一个好方法是对模型进行正则化(即约束模型):它拥有的自由度越少,则过拟合数据的难度就越大。正则化多项式模型的一种简单方法是减少多项式的次数。 对于线性模型,正则化通常是通过约束模型的权重来实现的。…

记一次生产中使用CompletableFuture遇到的坑

为什么使用CompletableFuture 业务功能描述:有一个功能是需要调用基础平台接口组装我们需要的数据,在这个功能里面我们要调用多次基础平台的接口,我们的入参是一个id,但是这个id是一个集合。我们都是使用RPC调用,一般…

【22年11月12日更新】搭建宝塔面板、青龙面板“京东代挂”

本文章仅供学习 一、青龙面板是什么? 青龙面板可以运行某东脚本,你在某宝、某度等各个渠道搜索“京东代挂”,都是用青龙面板。 二、搭建宝塔面板 1.更新 yum 包 首先下载finalshell通过账号密码连接服务器,然后输入 yum up…

零基础程序员想要学好.Net,跟着这7个步骤学习就可以了

作为一个初学者程序员,很喜欢问的一个问题就是:零基础如何自学编程?在后台也有很多读者私信我,问我这个问题,其实这个问题比较大,不是一两句就可以说清楚的。 所以,今天结合我个人的经历&#x…

注意力机制详解(Attention详解)

注意力机制与人眼类似,例如我们在火车站看车次信息,我们只关注大屏的车次信息,而忽略大屏外其他内容,从而导致钱包被偷。。。 注意力机制只关注重点信息,忽略不重要的信息,关注最核心的内容。 主要就是这…

推荐系统实战2——EasyRec 推荐框架环境配置

推荐系统实战2——EasyRec 推荐框架环境配置学习前言先验条件EasyRec仓库地址EasyRec环境配置一、EasyRec的下载二、EasyRec的初始化三、EasyRec的安装四、一些额外的情况学习前言 EasyRec是阿里巴巴开源的推荐系统框架。生命苦短,从建好的推荐系统框架开始学&…

【C++】STL简介 -- string 的使用及其模拟实现

文章目录一、STL 简介1、什么是 STL2、STL 的版本3、STL 的六大组件4、STL 的重要性5、如何学习 STL二、string 类的使用1、什么是 string2、string 类模板3、构造函数4、Iterators5、Capacity6、Element Access7、Modify8、String Operations9、Non-member function overloads…

Arduino程序设计(二) 按键控制LED灯

按键控制LED灯程序设计前言一、按键控制LED灯——内部上拉(基础)二、按键控制LED灯——外部上拉(基础)三、按键控制LED灯(进阶)总结参考文献前言 本文主要介绍三种按键控制LED灯的实现方式,分别…

PatchCore原理与代码解读

paper:Towards Total Recall in Industrial Anomaly Detection code:GitHub - amazon-science/patchcore-inspection 存在的问题 目前无监督缺陷检测常用的一种方法是直接利用在ImageNet上预训练的模型中的表示,而不专门进行目标分布的迁…

从零开始将图片信息和空间信息绑定,并在前端展示到地图

作者:xiaoyan 关键词:前端查询时展示和空间数据绑定的图片资源 本文适合零基础入门 背景:iServer支持空间查询,可以将空间数据属性表中的属性查询出来,如通过SQL语句查询出某地大楼实际层高,或者查询出某…

RHCE实验--配置nfs服务

1、开放/nfs/shared目录,供所有用户查询资料; 2、开放/nfs/upload目录,供所有用户上传下载资料; 服务器与客户端都写好yum源以及挂载光盘,然后安装服务包 [rootserver ~]# yum install rpcbind -y [rootserver ~]# y…

Vue3基础

Vue 官网 https://cn.vuejs.org/ https://v3.cn.vuejs.org/ https://staging-cn.vuejs.org/api/ 1、环境 1.1、nodejs node node -vnpm #当前版本 npm -v #升级npm版本 npm install -g npm1.2、vue #安装vue npm install -g vue-cli #安装最新版本 npm install -g vu…

LQ0197 锦标赛【程序填空】

题目来源:蓝桥杯2014初赛 C A组E题 题目描述 本题为代码补全填空题,请将题目中给出的源代码补全,并复制到右侧代码框中,选择对应的编译语言(C/Java)后进行提交。若题目中给出的源代码语言不唯一&#xff0…

Python简单实现人脸识别检测, 对照片进行评分

大家好,今天和大家说说如何用Python简单实现人脸识别检测, 对照片进行排名,看看自己有多漂亮。 [开发环境]: Python 3.8 Pycharm 2021.2 [模块使用]: requests >>> pip install requeststqdm >>> pip install tqdm 简单实现进度条效果…

Arduino从零开始(1)——按钮控制LED

0.前言 本文主要介绍Arduino对于开关和条件判断函数的使用。 目录 0.前言 1.介绍 2.按钮控制LED 2.1下拉模式: 2.2上拉模式 3.扩展实验: 1.介绍 前篇介绍了点亮LED,这次案例我们尝试通过一个简单的传感器——按钮,来实现…

Ubuntu20.04离线安装Vmware tools

参考连接:在 Linux 虚拟机中手动安装 VMware Tools 从 Workstation Pro 菜单栏中选择虚拟机 > 安装 VMware Tools。 如果安装了早期版本的Vmware tools,则菜单项是更新Vmware tools如果这个安装Vmware tools 是灰色的,进行如下的处理方式…

HTML基本骨架与编辑器选择

HTML基本骨架与编辑器选择 文章目录HTML基本骨架与编辑器选择1.HTML基本了解1.1 什么是HTML1.2 HTML标签1.3 HTML元素1.4 Web浏览器1.5 HTML网页结构1.6 HTML版本了解2.HTML基本骨架介绍3.HTML编辑器的下载与使用1.HTML基本了解 1.1 什么是HTML HTML 是用来描述网页的一种语言…

双链表的基本操作

目录 一、双链表的设计 二、双链表的实现和基本操作 1.实现双链表节点以及设置first、last指针 2.获取当前链表中元素的数量 3.获取指定位置的节点 4.在尾部添加结点元素 5.在指定位置添加元素 6.删除指定位置的结点 一、双链表的设计 针对于查询操作,我们可…

计算机操作系统:实验3 【虚拟存储器管理】

计算机操作系统:实验3 【虚拟存储器管理】 文章目录计算机操作系统:实验3 【虚拟存储器管理】一、前言二、实验目的三、实验环境四、实验内容五、实验说明1、设计中虚页和实页的表示2、关于缺页次数的统计3、LRU算法中“最近最久未用”页面的确定4、算法…