MySQL的find_in_set()函数

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 今天发现开发写的SQL中包含了find_in_set(),从来没见过,貌似挺有用的,了解一下

语法解释

FIND_IN_SET(str,strlist)

str是要查询的字符串或者字段;
strlist可以是字段和字符列表,多个字符串之间必须以逗号分隔,例如:'1,2,e,t'。

这个函数的作用就是查询strlist中是否包含str,返回结果为null或记录。假如字符串str在由N个子链组成的字符串列表strlist 中,则返回值的范围在 1 到 N 之间;如果str不在strlist 或strlist 为空字符串,则返回值为 0。例如:

mysql> select find_in_set('s','2,3,s,f,NULL');
+---------------------------------+
| find_in_set('s','2,3,s,f,NULL') |
+---------------------------------+
|                               3 |
+---------------------------------+
1 row in set (0.00 sec)

mysql> select find_in_set('vv','2,3,s,f,NULL');
+----------------------------------+
| find_in_set('vv','2,3,s,f,NULL') |
+----------------------------------+
|                                0 |
+----------------------------------+
1 row in set (0.00 sec)

mysql> select find_in_set('vv',null);
+------------------------+
| find_in_set('vv',null) |
+------------------------+
|                   NULL |
+------------------------+

find_in_set()和in的区别

比如有这样的需求,想要取出findin表的list字段中含有vnhg字符串的数据行:

mysql> select * from findin;
+----+------+----------------+
| id | name | list           |
+----+------+----------------+
|  1 | vnhg | bnmj,ewer,vnhg |
|  2 | mnn  | vbnj,dkf,vnhg  |
+----+------+----------------+
mysql> select * from findin where 'vnhg' in(list);
Empty set (0.00 sec)

上面的SQL是无法实现这个需求,实际上只有当list字段的值等于'vnhg'时(和in前面的字符串完全匹配),查询才能返回结果。
使用下面的查询就可以实现需求:

mysql> select * from findin where find_in_set('vnhg',list);
+----+------+----------------+
| id | name | list           |
+----+------+----------------+
|  1 | vnhg | bnmj,ewer,vnhg |
|  2 | mnn  | vbnj,dkf,vnhg  |
+----+------+----------------+

find_in_set()和like的区别

主要的区别就是like是广泛的模糊查询;而 find_in_set() 是精确匹配,并且字段值之间用‘,'分开。
以实际的例子来体会:

mysql> select * from findin where find_in_set('vnh',list);
Empty set (0.00 sec)
mysql> select * from findin where list like '%vnh%';
+----+------+----------------+
| id | name | list           |
+----+------+----------------+
|  1 | vnhg | bnmj,ewer,vnhg |
|  2 | mnn  | vbnj,dkf,vnhg  |
+----+------+----------------+
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
8天前
|
SQL 关系型数据库 MySQL
解码MySQL条件宝典:常用条件判断函数的完整指南
解码MySQL条件宝典:常用条件判断函数的完整指南
11 0
|
21天前
|
关系型数据库 MySQL 数据库
【MySQL】内置函数 -- 详解
【MySQL】内置函数 -- 详解
|
1天前
|
存储 关系型数据库 MySQL
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】(4)
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】
|
1天前
|
存储 SQL 关系型数据库
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】(3)
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】
|
1天前
|
存储 SQL 关系型数据库
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】(2)
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】
|
1天前
|
存储 SQL 关系型数据库
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】(1)
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】
|
2天前
|
存储 SQL 关系型数据库
MySQL 存储函数及调用
本文主要介绍了MySQL存储函数及调用的方法,介绍了存储函数的示例,如何在MySQL中创建存储函数,以及介绍了MySQL中如何创建触发器,一目了然。在MySQL中,存储函数是预定义的SQL逻辑单元,可接收参数并返回单个值。创建存储函数使用`CREATE FUNCTION`语句,如示例中的`square_number`函数,它接收一个整数并返回其平方。调用存储函数就像调用普通函数一样,例如在`SELECT`语句中。存储函数可用于简化复杂逻辑,提高效率。此外,还可以通过`DROP FUNCTION`删除不再需要的函数。示例展示了不同场景下的存储函数应用,包括数字运算、字符串处理和逻辑判断。
71 2
|
6天前
|
存储 SQL 关系型数据库
MySQL数据库——存储函数(介绍、案例)
MySQL数据库——存储函数(介绍、案例)
21 0
|
6天前
|
SQL 存储 关系型数据库
MySQL数据库——基础篇总结(概述、SQL、函数、约束、多表查询、事务)二
MySQL数据库——基础篇总结(概述、SQL、函数、约束、多表查询、事务)二
16 0
|
6天前
|
SQL 关系型数据库 MySQL
MySQL数据库——基础篇总结(概述、SQL、函数、约束、多表查询、事务)一
MySQL数据库——基础篇总结(概述、SQL、函数、约束、多表查询、事务)一
17 5