MySQL中find_in_set()函数用法示例详解

目录
  • 1、 find_in_set()官方涵义(MySQL手册中语法说明)
  • 2、find_in_set() 和 in 的区别
  • 3、应用场景
    • 3.1 文章表type字段查询
    • 3.2 部门树查询,匹配当前节点及所有子节点
  • 总结

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

FIND_IN_SET(str,strlist),该函数的作用是查询字段(strlist) 中是否包含(str)的结果,返回结果为 null或记录 。

str 要查询的字符串
strlist 需查询的字段,参数以”,”分隔,形式如 (1,2,6,8,10,22)

假如字符串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的数,该数为前一个字符串在后一个字符串中的位置。

2、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;

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');

SELECT id,list FROM TEST WHERE FIND_IN_SET(list,'AA,BB')

区别:
1、in后面只能跟常量, find_in_set()函数可以使用常量或字段。
2、in是完全匹配,find_in_set()函数是精确匹配,字段值以英文”,”分隔。
另:like是广泛的模糊匹配,字符串中没有分隔符,Find_IN_SET 是精确匹配,字段值以英文”,”分隔,Find_IN_SET查询的结果要小于like查询的结果。

3、应用场景

3.1 文章表type字段查询

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

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

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

1) 数据表字段说明

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

SELECT dept_id FROM sys_dept WHERE dept_id = 100 or FIND_IN_SET( 100 , ancestors )

总结

到此这篇关于MySQL中find_in_set()函数用法详解的文章就介绍到这了,更多相关MySQL find_in_set()函数用法内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Mysql中find_in_set()函数用法详解以及使用场景

    目录 一.find_in_set() 函数详解 二.应用场景 三.FIND_IN_SET()和IN.LIKE的区别: 1.IN和FIND_IN_SET的区别: 2.like和FIND_IN_SET的区别: 总结 一.find_in_set() 函数详解 示例: select FIND_IN_SET('1', '1,2,3'); // 结果:1 select FIND_IN_SET('3', '1,2,3'); // 结果:3 select FIND_IN_SET('4', '1,2,3'); /

  • mysql通过find_in_set()函数实现where in()顺序排序

    本文章来为各位介绍一篇关于mysql 实现按 where in () 中的顺序排序,用find_in_set() 函数的教程,希望此教程能够对各位有所帮助. select * from table where id in ('783',' 769',' 814',' 1577',' 1769') order by find_in_set( id, '783, 769, 814, 1577, 1769' ) 查出来: 769 1577 814 1769 783 为什么不是 783 769 814

  • mysql中find_in_set()函数的使用及in()用法详解

    MySQL手册中find_in_set函数的语法解释: FIND_IN_SET(str,strlist) str 要查询的字符串 strlist 字段名 参数以","分隔 如 (1,2,6,8,10,22) 查询字段(strlist)中包含(str)的结果,返回结果为null或记录 假如字符串str在由N个子链组成的字符串列表strlist 中,则返回值的范围在 1 到 N 之间. 一个字符串列表就是一个由一些被 ',' 符号分开的子链组成的字符串.如果第一个参数是一个常数字符串,而第

  • mysql中find_in_set()函数的使用详解

    首先举个例子来说: 有个文章表里面有个type字段,它存储的是文章类型,有 1头条.2推荐.3热点.4图文等等 . 现在有篇文章他既是头条,又是热点,还是图文,type中以 1,3,4 的格式存储.那我们如何用sql查找所有type中有4的图文类型的文章呢?? 这就要我们的 find_in_set 出马的时候到了.以下为引用的内容: select * from article where FIND_IN_SET('4',type) --------------------------------

  • MySql中JOIN的用法示例详解

    目录 笛卡尔积:CROSS JOIN 内连接:INNER JOIN 左连接:LEFT JOIN 右连接:RIGHT JOIN 外连接:OUTER JOIN USING子句 自然连接:NATURE JOIN 上次面试被问到JOIN,自己都已经忘了课堂上讲的笛卡尔积那些就是JOIN,最近重新复习了一遍 JOIN的含义就如英文单词“join”一样,连接两张表,大致分为内连接,外连接,右连接,左连接,自然连接. 先创建两个表,下面用于示例 CREATE TABLE t_blog( id INT PRIM

  • MySQL中Replace语句用法实例详解

    目录 前言 一.replace into函数 二.replace into .insert ignore 和 insert into的区别 三.replace函数 总结 前言 replace into平时在开发中很少用到,这次是因为在做一个生成分布式ID的开源项目,调研雅虎推出的一个基于数据库生成唯一id生成方案:flickr 碰到的一个知识盲点,仅以此篇记录一下. 一.replace into函数 表结构 CREATE TABLE `id_generator` ( `id` bigint(20

  • Python3.2中Print函数用法实例详解

    本文实例讲述了Python3.2中Print函数用法.分享给大家供大家参考.具体分析如下: 1. 输出字符串 >>> strHello = 'Hello World' >>> print (strHello) Hello World 2. 格式化输出整数 支持参数格式化,与C语言的printf类似 >>> strHello = "the length of (%s) is %d" %('Hello World',len('Hello

  • PHP中spl_autoload_register()函数用法实例详解

    本文实例分析了PHP中spl_autoload_register()函数用法.分享给大家供大家参考,具体如下: 在了解这个函数之前先来看另一个函数:__autoload. 一.__autoload 这是一个自动加载函数,在PHP5中,当我们实例化一个未定义的类时,就会触发此函数.看下面例子: printit.class.php: <?php class PRINTIT { function doPrint() { echo 'hello world'; } } ?> index.php <

  • pytorch中permute()函数用法实例详解

    目录 前言 三维情况 变化一:不改变任何参数 变化二:1与2交换 变化三:0与1交换 变化四:0与2交换 变化五:0与1交换,1与2交换 变化六:0与1交换,0与2交换 总结 前言 本文只讨论二维三维中的permute用法 最近的Attention学习中的一个permute函数让我不理解 这个光说太抽象 我就结合代码与图片解释一下 首先创建一个三维数组小实例 import torch x = torch.linspace(1, 30, steps=30).view(3,2,5) # 设置一个三维

  • Python中的Super用法示例详解

    目录 Python Super用法 附:super的典型用法 总结 Python Super用法 这篇文章我们来介绍一下 super,我相信大部分的人使用 super 都是使用这种方式: # 就是我有一个 class 比如说是 Male,然后继承另外一个 class 比如是 Person,然后我在这个 Male 也就是它的子类的 init 函数里面用 super().__init__() 来调用它父类的初识化函数 from objprint import op class Person: def

  • Python标准库中的logging用法示例详解

    目录 1.logging的介绍 2.简单用法示例 3.日志级别 4.打印格式的各个参数 5.日志输出到指定文件 6.日志回滚(按照文件大小滚动) 7.日志回滚(按照时间滚动) 1.logging的介绍 logging是Python标准库中记录常用的记录日志库,通过logging模块存储各种格式的日志,主要用于输出运行日志,可以设置输出日志的等级.日志保存路径.日志文件回滚等. 2.简单用法示例 首先创建一个logger.py的文件,其里面的代码如下所示: import logging # 1.创

  • MATLAB中print函数使用示例详解

    目录 语法 说明 示例 打印图窗纸张副本 将图窗复制到剪贴板 将图窗另存为图像文件 将图窗另存为向量图形文件 向 EPS 文件添加 TIFF 预览 指定要保存的图窗 以屏幕大小和分辨率保存图窗 保存填满页面的图窗 保存图窗而不保存 UIControl 返回图窗的 RGB 图像数据 创建高分辨率影片帧 print函数的功能是打印图窗或保存为特定文件格式. 语法 print(filename,formattype) print(filename,formattype,formatoptions) p

  • PHP中array_slice函数用法实例详解

    本文详细介绍了array_slice函数的详细用法以及一些常用的array_slice实例程序,分享给大家供大家参考.具体分析如下: array_slice() 函数在数组中根据条件取出一段值,并返回. 注释:如果数组有字符串键,所返回的数组将保留键名,参见例子 4. 语法:array_slice(array,offset,length,preserve) 函数在数组中根据条件取出一段值,并返回. 参数: array  必需,规定输入的数组. offset  必需,数值,规定取出元素的开始位置,

随机推荐