MySQL 英文逗号隔开的数据如何模糊精确查询

在 PHP 中,如果你的数据字段内容是类似 "1,3,5,13,23" 这样的字符串(多个数字用英文逗号分隔),而你只想精确匹配包含数字 3 (即单独的 3,而不是 132330 等),那么不能直接使用 SQL 的 LIKE '%3%',因为那样会误匹配包含 3 的其他数字。

方法一:使用 MySQL 的 REGEXP(推荐)

假设你的字段名为 numbers,表名为 my_table,你可以这样写 SQL:

复制代码
SELECT * FROM my_table 
WHERE numbers REGEXP '(^|,)3(,|$)';

解释:

  • (^|,) 表示字符串开头或逗号(即前面是边界)
  • 3 是你要匹配的数字
  • (,|$) 表示后面是逗号或字符串结尾(即后面是边界)

这样就能精确匹配单独的 3,不会匹配 132330 等。

方法三:使用 FIND_IN_SET(MySQL 特有函数)

MySQL 提供了 FIND_IN_SET 函数,该函数返回一个整数,表示在字符串中搜索到的位置,专门用于在逗号分隔的字符串中查找值:

复制代码
SELECT * FROM my_table 
WHERE FIND_IN_SET('3', numbers) > 0;

注意:FIND_IN_SET 要求字段值是纯逗号分隔 ,不能有空格。如果数据中可能有空格(如 "1, 3, 5"),需要先用 REPLACE(numbers, ' ', '') 清理。

如果数据内容是一个 JSON 数组,则需要使用 JSON_CONTAINS() 函数来查询

复制代码
JSON_CONTAINS(numbers, '3')

今天在查询包含指定的标签数据时,想到以前做过,但是想不起怎么弄的了,特此记录一下,方便后续查看。

相关推荐
小冷coding1 天前
【MySQL】MySQL 插入一条数据的完整流程(InnoDB 引擎)
数据库·mysql
周杰伦的稻香1 天前
MySQL中常见的慢查询与优化
android·数据库·mysql
·云扬·1 天前
MySQL 常见存储引擎详解及面试高频考点
数据库·mysql·面试
何以不说话1 天前
mysql 的主从复制
运维·数据库·学习·mysql
橘子131 天前
MySQL库的操作(二)
数据库·mysql·oracle
·云扬·1 天前
MySQL各版本核心特性演进与主流分支深度解析
数据库·sql·mysql
田超凡1 天前
深入理解MySQL_6 Temporary临时表
mysql·java-ee
尽兴-1 天前
MySQL 8.0主从复制原理与实战深度解析
数据库·mysql·主从复制
YongCheng_Liang1 天前
MySQL 高级特性深度解析:从索引优化到高可用架构
运维·数据库·mysql
<花开花落>1 天前
MySQL 数据备份流程化
mysql·systemd