博客
关于我
MYSQL中 find_in_set() 函数用法详解
阅读量:791 次
发布时间:2023-02-11

本文共 1327 字,大约阅读时间需要 4 分钟。

MYSQL中 find_in_set() 函数用法详解

官方定义

FIND_IN_SET(str, strlist) 是一个MySQL函数,用于检查字符串 str 是否存在于由逗号分隔的字符串列表 strlist 中。如果存在,函数返回该字符串在列表中的位置(从1开始计数);否则返回0。此外,若 strlist 为空或 str 不在其中,则返回0。如果 strstrlist 为NULL,则返回NULL。

与IN运算符的区别

参数类型

  • IN: 后续参数只能是常量值,无法使用字段或表达式。
  • FIND_IN_SET: 可以接受常量或字段,适用于字段值的精确匹配。

匹配方式

  • IN: 完全匹配,结果基于严格比较。
  • FIND_IN_SET: 精确匹配,字符串列表中的项需要严格等于 str

字符串分隔符

  • FIND_IN_SET: 字段值需按英文逗号分隔,支持多个项。
  • IN: 后续参数直接使用逗号分隔的字符串列表。

示例对比

以下测试表用于比较两种函数:

CREATE TABLE `test` (    `ID` int(11) NOT NULL,    `LIST` varchar(255) DEFAULT NULL);INSERT INTO `test` VALUES ('1', 'AA,BB,CC');INSERT INTO `test` VALUES ('2', 'AA,BB');INSERT INTO `test` VALUES ('3', 'AA');
  • IN查询字段条件:
SELECT id, list, 'FIND_IN_SET字段' AS '结果' FROM TEST WHERE FIND_IN_SET('AA', list);
  • FIND_IN_SET常量条件为真:
SELECT id, list, 'FIND_IN_SET常量条件为真' AS '结果' FROM TEST WHERE FIND_IN_SET('AA', 'AA,BB,CC');
  • FIND_IN_SET常量条件为假:
SELECT id, list, 'FIND_IN_SET常量条件为假' AS '结果' FROM TEST WHERE FIND_IN_SET('BB', 'AA,BB,CC');

应用场景

文章表查询

文章表中 type 字段存储多个类型值,例如 1,3,4。我们可以使用 FIND_IN_SET 检查是否包含特定类型。

SELECT * FROM article WHERE FIND_IN_SET('4', type);

部门树查询

部门树中,某节点的所有子节点需要匹配当前节点或其父节点。可通过 FIND_IN_SET 检查 ancestors 字段中的父ID或自身ID。

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

总结

FIND_IN_SET 函数在数据处理和查询优化中具有显著优势,尤其适用于需要精确匹配字符串列表的场景。与 IN 运算符相比,其灵活性和适用性更强,适合复杂的字段值匹配需求。

转载地址:http://vsbfk.baihongyu.com/

你可能感兴趣的文章
mysqldump: Got error: 1044: Access denied for user ‘xx’@’xx’ to database ‘xx’ when using LOCK TABLES
查看>>
Mysqldump参数大全(参数来源于mysql5.5.19源码)
查看>>
mysqldump备份时忽略某些表
查看>>
mysqldump实现数据备份及灾难恢复
查看>>
mysqldump数据库备份无法进行操作只能查询 --single-transaction
查看>>
mysqldump的一些用法
查看>>
mysqli
查看>>
MySQLIntegrityConstraintViolationException异常处理
查看>>
mysqlreport分析工具详解
查看>>
MySQLSyntaxErrorException: Unknown error 1146和SQLSyntaxErrorException: Unknown error 1146
查看>>
Mysql_Postgresql中_geometry数据操作_st_astext_GeomFromEWKT函数_在java中转换geometry的16进制数据---PostgreSQL工作笔记007
查看>>
mysql_real_connect 参数注意
查看>>
mysql_secure_installation初始化数据库报Access denied
查看>>
MySQL_西安11月销售昨日未上架的产品_20161212
查看>>
Mysql——深入浅出InnoDB底层原理
查看>>
MySQL“被动”性能优化汇总
查看>>
MySQL、HBase 和 Elasticsearch:特点与区别详解
查看>>
MySQL、Redis高频面试题汇总
查看>>
MYSQL、SQL Server、Oracle数据库排序空值null问题及其解决办法
查看>>
mysql一个字段为空时使用另一个字段排序
查看>>