MySQL的find_in_set()函数

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
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
目录
相关文章
|
11天前
|
存储 JSON 关系型数据库
mysql中find_in_set()函数用法详解及增强函数
总结而言,`FIND_IN_SET()`是MySQL中处理由逗号分隔的字符串列表的一种便捷方法,尤其适用于列表相对较短且不经常更改的场景。然而,对于更为复杂的需要高性能和可扩展性的数据库设计,它可能不是最优选择,应考虑使用更加正规化的数据库结构。
16 2
mysql中find_in_set()函数用法详解及增强函数
|
15天前
|
关系型数据库 MySQL
mysql使用 CONCAT(字段,字段) 函数拼接
mysql使用 CONCAT(字段,字段) 函数拼接
|
1月前
|
JSON 关系型数据库 MySQL
MySQL常用函数解读:从基础到进阶的全方位指南
MySQL常用函数解读:从基础到进阶的全方位指南
|
1月前
|
关系型数据库 MySQL 开发者
Mysql COUNT() 函数详解
【6月更文挑战第19天】Mysql COUNT() 函数详解,包括 COUNT() 的用法及 COUNT() 带条件查询的操作
|
1月前
|
SQL 关系型数据库 MySQL
MySQL数据库基础第二篇(函数)
MySQL数据库基础第二篇(函数)
|
1月前
|
关系型数据库 MySQL
【随手记】MySQL中ROW_NUMBER()、RANK()和DENSE_RANK()函数的用法
【随手记】MySQL中ROW_NUMBER()、RANK()和DENSE_RANK()函数的用法
26 1
|
23天前
|
存储 语音技术 Python
语音识别,函数综合案例,黑马ATM,/t/t一个对不齐,用两个/t,数据容器入门,数据容器可以分为列表(list)、元组(tuple)、字符串(str)、集合(set)、字典(dict)
语音识别,函数综合案例,黑马ATM,/t/t一个对不齐,用两个/t,数据容器入门,数据容器可以分为列表(list)、元组(tuple)、字符串(str)、集合(set)、字典(dict)
|
25天前
|
存储 关系型数据库 MySQL
【Elasticsearch】在es中实现mysql中的FIND_IN_SET查询条件
【Elasticsearch】在es中实现mysql中的FIND_IN_SET查询条件
26 0
|
29天前
|
SQL 关系型数据库 MySQL
MySQL外键约束行为解析:CASCADE, NO ACTION, RESTRICT, SET NULL
MySQL外键约束行为解析:CASCADE, NO ACTION, RESTRICT, SET NULL
24 0
|
1月前
|
SQL 关系型数据库 MySQL
mysql中GROUP_CONCAT函数详解
mysql中GROUP_CONCAT函数详解
20 0