MYSQL中 find_in_set() 函数用法详解

news2024/11/16 19:53:50

MYSQL中 find_in_set() 函数用法详解

官方涵义(MySQL手册中语法说明)

  • FIND_IN_SET(str,strlist) : str 要查询的字符串,strlist 需查询的字段,参数以”,”分隔,形式如 (1,2,6,8,10,22);该函数的作用是查询字段(strlist)中是否包含(str)的结果,返回结果为null或记录。

  • 假如字符串str在由N个子链组成的字符串列表strlist 中,则返回值的范围在 1 到 N 之间。 一个字符串列表就是一个由一些被 ‘,’ 符号分开的子链组成的字符串。如果第一个参数是一个常数字符串,而第二个是type SET列,则FIND_IN_SET() 函数被优化,使用比特计算。 如果str不在strlist 或strlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为 NULL。这个函数在第一个参数包含一个逗号( , )时将无法正常运行。

  • 示例:

  • SELECT FIND_IN_SET('b', 'a,b,c,d');
    // 结果:2
    // 因为 b 在strlist集合中2的位置, a是位置1
     
    select FIND_IN_SET('1', '1');
    // 结果:1 
    // 这时候的strlist集合有点特殊,只有一个字符串
     
    select FIND_IN_SET('2', '1,2'); 
    // 结果:2
     
    select FIND_IN_SET('6', '1'); 
    // 结果:0 strlist中不存在str,所以返回0。
    
  • 综上: FIND_IN_SET函数中,若前一个字符串包含在后一个字符串集合中,返回大于0的数,该数为前一个字符串在后一个字符串中的位置。

find_in_set() 和 in 的区别

  • 新建测试表,增加几条测试数据。

  • CREATE TABLE `test` (
      `ID` int(11) NOT NULL,
      `LIST` varchar(255) DEFAULT NULL,
      PRIMARY KEY (`ID`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
     
    -- ----------------------------
    -- Records of test
    -- ----------------------------
    INSERT INTO `test` VALUES ('1', 'AA,BB,CC');
    INSERT INTO `test` VALUES ('2', 'AA,BB');
    INSERT INTO `test` VALUES ('3', 'AA');
    
  • find_in_set()和in的查询比较

  • -- IN查询字段条件
    SELECT id,list,'字段条件' AS 'IN字段' from TEST WHERE list in ('AA');
     
    -- IN查询常量条件-条件为真
    SELECT id,list,'条件为真' AS 'IN常量条件为真' from TEST WHERE 'AA' in ('AA','BB');
     
    -- IN查询常量条件-条件为假
    SELECT id,list,'条件为假' AS 'IN常量条件为假'  from TEST WHERE 'AA' in ('BB','CC');
     
    -- FIND_IN_SET字段条件
    SELECT id,list,'字段条件' AS 'FIND_IN_SET字段' from TEST WHERE FIND_IN_SET('AA', list);
     
    -- FIND_IN_SET常量条件为真
    SELECT id,list,'条件为真' AS 'FIND_IN_SET常量条件为真' from TEST WHERE FIND_IN_SET('AA', 'AA,BB,CC');
     
    -- FIND_IN_SET常量条件为假
    SELECT id,list,'条件为假' AS 'FIND_IN_SET常量条件为假' from TEST WHERE FIND_IN_SET('AA', 'BB,CC');
    
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lYuDVV6a-1686182845966)(C:\Users\quyanliang\AppData\Roaming\Typora\typora-user-images\1686182726299.png)]

  • 区别:

  • in后面只能跟常量, find_in_set()函数可以使用常量或字段。

  • in是完全匹配,find_in_set()函数是精确匹配,字段值以英文”,”分隔。

  • 另:like是广泛的模糊匹配,字符串中没有分隔符,Find_IN_SET 是精确匹配,字段值以英文”,”分隔,Find_IN_SET查询的结果要小于like查询的结果。

应用场景

文章表type字段查询

  • 文章表里面有个type字段,它存储的是文章类型,有 1头条、2推荐、3热点、4图文等等 。现在有篇文章他既是头条,又是热点,还是图文,type中以 1,3,4 的格式存储。那我们如何用sql查找所有type中有4的图文类型的文章呢?

  • select * from article where FIND_IN_SET('4',type)
    

部门树查询,匹配当前节点及所有子节点

数据表字段说明

- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1BtIv9YJ-1686182845967)(C:\Users\quyanliang\AppData\Roaming\Typora\typora-user-images\1686182816969.png)]

匹配部门id或父id为100的数据

  • SELECT dept_id FROM sys_dept WHERE dept_id = 100 or FIND_IN_SET( 100 , ancestors ) 
    
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fzx9xjRf-1686182845968)(C:\Users\quyanliang\AppData\Roaming\Typora\typora-user-images\1686182833612.png)]

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

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

相关文章

分布式存储与并行处理环境配置:Hadoop、HBase和Spark等

本文介绍Linux系统中配置Hadoop、HBase和Spark环境,包括安装Java运行环境、下载安装包、进行配置和测试。通过这种方式,可以搭建一个强大的分布式计算环境,用于处理大规模数据集。为了成功配置Hadoop、HBase和Spark环境,需要理解它…

chatgpt赋能python:Python实现输出在同一行的技巧

Python实现输出在同一行的技巧 介绍 在Python中,我们经常需要将一些文本或者变量输出到控制台上,以便查看或者进行交互式调试。但是默认情况下,每次输出都会换行展示,这在某些情况下可能会让输出显得比较混乱,尤其是…

Ubuntu安装及使用教程

Ubuntu安装及使用教程 一、基本介绍二、vmware下安装ubuntu系统三、ubuntu系统使用 回到目录   回到末尾 一、基本介绍 对于ubuntu而言,就是linux操作系统的具体,而linux对于ubuntu来说就是他的抽象;在linux操作系统中,因为应用…

SSD202D-挂载根文件系统

参考链接: 启明云端分享|SSD20X 如何使用SD卡根文件系统_sudo./make_sd.sh_启明智显的博客-CSDN博客 启明云端分享|SSD202D核心板使用NFS_lx_mem=0x3f00000 mma_heap=mma_heap_name0,miu=0,sz=_启明智显的博客-CSDN博客 然后思路: 1.要在kernel打开文件系统格式支持 CONFIG_…

chatgpt赋能python:Python计算圆面积方法教程

Python计算圆面积方法教程 你是否想过如何用Python计算圆面积?圆形是一个基本的几何形状,计算圆的面积是一个必要的技能。Python作为一种流行的编程语言,可以帮助我们更轻松地计算圆的面积。本教程将介绍如何使用Python计算圆的面积。 什么…

【Red Hat7.9安装Oracle11g--调用图形化界面的几种方式】

【Red Hat7.9安装Oracle11g--调用图形化界面的几种方式】 🔻 一、续上一篇[【Red Hat 7.9---详细安装Oracle 11g---图形化界面方式】](https://blog.csdn.net/qq_41840843/article/details/131198718?spm1001.2014.3001.5501)⛳ 1.1 前言⛳ 1.2 方式一、使用Xmanag…

Mock和Vite-plugin-Mock的区别是什么?

简介 我不知道大家和我是否有一样的疑问,之前Mock.js用的挺好,为啥又出现了一个vite-plugin-mock,而且这个插件还依赖于Mock.js.那么他的优势到底是什么呢?如果你也有这样的疑问,本文最后会给出答案解开这个谜底 前言 我之前已经…

6月更新——企业互联,搭建起企业与企业之间的业务桥梁

企业互联 企业互联的作用是促进企业之间的合作和交流,提高企业的运营效率和竞争力。具体来说,企业互联可以实现以下几个方面的作用: 信息共享: 通过企业互联,企业可以方便地实现内部和外部信息的共享和传递。这样可…

chatgpt赋能python:Python装pipinstall的方法

Python装pip install的方法 如果你是一个Python开发者,那么你一定需要一些第三方库来辅助你完成一些任务。而pip就是Python的包管理器,它可以让你很方便地安装和管理第三方库。但是,在使用pip之前,我们需要先安装它。 什么是pip…

1.OpenStack介绍及环境部署(PS笔记)

当面对KVM集群的时候,我们对KVM的管理以及宿主机的管理就会遇到很大的难度,例如: 查看每一个宿主机有多少台KVM虚拟机? 查看每一个宿主机资源信息,每一个KVM虚拟机资源信息?查看每一台宿主机配置信息,每一个KVM虚拟机…

C#异步详解

异步编程是指在程序执行过程中,不需要等待某个操作完成,就可以继续执行后续的代码。比如我们开发了一个web页面中有一个上传文件功能,我们上传文件时使用异步操作,就不用等待文件的上传时间,可以先在网页上进行其他操作…

Linux 命令(9)—— top

文章目录 1、命令简介2、使用方法3、命令行参数4、显示摘要5、进程列表字段6、交互命令a、全局命令b、摘要区域命令c、任务区域命令d、颜色映射e、可选显示窗口 7、配置文件a、系统配置文件b、个人配置文件 1、命令简介 top提供运行系统的动态实时视图。它可以显示系统摘要信息…

RK3399平台开发系列讲解(Pinctrl子系统)pinctrl的使用

平台内核版本安卓版本RK3399Linux4.4Android7.1🚀返回专栏总目录 文章目录 一、配置 pinctrl二、调用 pinctrl2.1、Iomux 配置2.2、驱动强度配置2.3、上下拉配置沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍pinctrl设备树的使用方法。 一、配置 pinctr…

牛客网专项练习——C语言错题集(6)

文章目录 数组地址的移位C 源程序和函数的关系二维数组值的表示方式(n & (n-1)) 0容易出错的 位运算fseek 可以实现的操作 数组地址的移位 个人理解: 这题的 A C 选项的差别应该在优先级上(下文有 C 语言运算符优先级表)&am…

移动端测试-Adb工具

移动端测试_Adb工具 Adb的基本使用简要介绍通用操作步骤一、连接设备二、断开设备三、安装四、卸载五、抓取日志六、文件传输七、截屏八、清除apk缓存九、查看终端各apk占用内存 Adb的基本使用 简要介绍 adb其实就是移动端的调试工具, 全称为Android Debug Bridge…

chatgpt赋能python:Python设置画笔粗细:从入门到精通

Python设置画笔粗细:从入门到精通 在Python中,画图是非常常见的操作。设置画笔的粗细是其中的一个重要部分。本文将从最基础的设置粗细开始讲起,逐步深入,带您了解Python设置画笔粗细的各种方法。 一、使用pensize()函数 pensi…

【备战秋招】每日一题:5月13日美团春招第三题:题面+题目思路 + C++/python/js/Go/java带注释

为了更好的阅读体检,为了更好的阅读体检,,可以查看我的算法学习博客第三题-火车调度 在线评测链接:P1288 题目描述 塔子哥是一位火车车厢调度员。 这一天,一列带有 n 个编号车厢的列车进站了,编号为 1\rightarrow …

【瑞萨RA_FSP】GPT—— 通用PWM定时器

文章目录 一、PWM简介二、GPT简介三、GPT的框图分析1. 计数器2. 周期设置和周期设置缓冲寄存器3. 时钟输入4. 控制寄存器5. 比较器和比较/输入捕获寄存器6. 中断请求信号7. IO输入输出引脚8. ELC事件输入9. 输出相位切换 一、PWM简介 PWM 的全称是脉冲宽度调制(Pul…

chatgpt赋能python:如何安装PyQt5

如何安装PyQt5 Python是现在最受欢迎的编程语言之一。Python与它的第三方库使得开发者能够在不同的领域中编写高质量的代码。因此,Python已经成为了许多开发者的首选之一,而PyQt5则是Python中使用最多的图形界面开发工具之一。在这篇文章中,…

chatgpt赋能python:Python环境安装必知必会

Python环境安装必知必会 Python作为一种高效、易用、广受欢迎的程序语言,在数据分析、人工智能、Web开发等领域都得到了广泛应用。如果您也想学习Python,或者需要开发Python程序,那么必须首先安装Python环境。本文将为您介绍Python环境安装的…