首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在MySQL中查询逗号分隔的字符串值?

在 MySQL 中,查询逗号分隔的字符串值可以通过多种方法实现,具体取决于你的需求和数据结构。以下是几种常见的方法:

1. 使用 FIND_IN_SET 函数

FIND_IN_SET 函数是 MySQL 提供的一个方便的函数,用于在逗号分隔的字符串中查找特定值。

示例

假设你有一个表 my_table,其中有一列 comma_separated_values,存储逗号分隔的字符串:

代码语言:javascript
复制
CREATE TABLE my_table (
    id INT AUTO_INCREMENT PRIMARY KEY,
    comma_separated_values VARCHAR(255)
);

INSERT INTO my_table (comma_separated_values) VALUES
('apple,banana,cherry'),
('banana,orange'),
('apple,grape'),
('cherry,grape,banana');

你想查找包含 banana 的所有行:

代码语言:javascript
复制
SELECT * FROM my_table
WHERE FIND_IN_SET('banana', comma_separated_values) > 0;

2. 使用 LIKE 运算符

虽然 LIKE 运算符不是专门为处理逗号分隔的字符串设计的,但在某些情况下也可以使用。不过,这种方法不如 FIND_IN_SET 精确,因为它可能会匹配部分字符串。

示例

查找包含 banana 的所有行:

代码语言:javascript
复制
SELECT * FROM my_table
WHERE comma_separated_values LIKE '%banana%';

请注意,这种方法可能会匹配到不完整的单词,例如 bananabread

3. 使用正则表达式

MySQL 也支持正则表达式,可以用来匹配更复杂的模式。

示例

查找包含 banana 的所有行:

代码语言:javascript
复制
SELECT * FROM my_table
WHERE comma_separated_values REGEXP '(^|,)banana(,|$)';

4. 使用 JSON 数据类型(MySQL 5.7+)

如果你使用的是 MySQL 5.7 或更高版本,可以考虑将数据存储为 JSON 数组,这样查询会更加高效和灵活。

示例

假设你有一个表 my_table,其中有一列 json_values,存储 JSON 数组:

代码语言:javascript
复制
CREATE TABLE my_table (
    id INT AUTO_INCREMENT PRIMARY KEY,
    json_values JSON
);

INSERT INTO my_table (json_values) VALUES
('["apple", "banana", "cherry"]'),
('["banana", "orange"]'),
('["apple", "grape"]'),
('["cherry", "grape", "banana"]');

你想查找包含 banana 的所有行:

代码语言:javascript
复制
SELECT * FROM my_table
WHERE JSON_CONTAINS(json_values, '"banana"');
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

mysql学习—查询数据库特定对应

遇到一个问题,我将问题抽象简单描述如下: 循环查询数据库所有表,查出字段包含tes表,并且将test修改为hello?...因为自己不才找了很久也没有找到很好方法,又对mysql游标等用法不是很了解,在时间有限情况下,发现了下面的方法,分享给大家: 1:查找 (1)使用工具 我使用mysqlNavicat...for MySQL工具 (2)使用sql语法 这个方式暂时我还是不会,等我熟悉语法之后在补充。...(pic, '/attached', 'http://www.tcl.com'); 正则替换法: 下面这段意思是:df_templates_pages 表字段为enerateHtml包含有.../toProduct', '/product') WHERE generateHtml REGEXP ('\/front\/product\/toProduct[Kyu]{0,4}\/'); 3.单表全字段查询某个

7.5K10

mysql字符串等值查询条件字段末尾有空格也能查到数据问题

,name字段分别是:不带空格duduu、带一个空格duduu、带两个空格duduu,且空格都是加在了尾部。...,这个倒不是我们关注重点,我们关注等值查询是否可以正常查询出来: #不带空格duduu mysql> select * from student_info where name='duduu'; +...二、合理推测 通过上面的实验,明明是三个长度不同字符串,空格放在前边被认为是不同,放在后边又被认为是相同,难道说:对于MySQL来说,字符串字符串等值判断时会忽略后面的空格,duduu(不带空格)、...CHAR、VARCHAR、TEXT等字符串等值比较(“=”)会忽略掉尾部空格。...五、总结 本文结论如下: 在存储时,不会自动截断尾部空格,会按原值存储; MySQLCHAR、VARCHAR、TEXT等字符串字段在等值比较("=")时,基于PAD SPACE校对规则,会忽略掉尾部空格

76910

同事问我MySQL怎么递归查询,我懵逼了...

但是,我记得 MySQL 是没有递归查询功能,那 MySQL 应该怎么实现呢? 于是,就有了这篇文章。...find_in_set 函数 函数语法:find_in_set(str,strlist) str 代表要查询字符串 , strlist 是一个以逗号分隔字符串 ('a,b,c')。...若没有指定,默认以逗号分隔。 对于 dept 表,我们可以把表所有 id 以逗号拼接。(这里没有用到 group by 分组字段,则可以认为只有一组) ?...我们知道 MySQL 默认结束符为分号,表明指令结束并执行。但是在函数体,有时我们希望遇到分号不结束,因此需要暂时把结束符改为一个随意其他。...这里定义 ids 即作为整个函数返回,是用来拼接成最终我们需要逗号分隔递归串。 而 tempids 是为了记录下边 while 循环中临时生成所有子节点以逗号拼接成字符串

3K20

MySQL 如何实现递归查询?「建议收藏」

但是,我记得 MySQL 是没有递归查询功能,那 MySQL 应该怎么实现呢? 于是,就有了这篇文章。...find_in_set 函数 函数语法:find_in_set(str,strlist) str 代表要查询字符串 , strlist 是一个以逗号分隔字符串 (‘a,b,c’)。...若没有指定,默认以逗号分隔。 对于 dept 表,我们可以把表所有 id 以逗号拼接。...我们知道 MySQL 默认结束符为分号,表明指令结束并执行。但是在函数体,有时我们希望遇到分号不结束,因此需要暂时把结束符改为一个随意其他。...这里定义 ids 即作为整个函数返回,是用来拼接成最终我们需要逗号分隔递归串。 而 tempids 是为了记录下边 while 循环中临时生成所有子节点以逗号拼接成字符串

11.4K10

mysqlfind_in_set()函数使用

分隔 (1,2,6,8) 查询字段(strlist)包含(str)结果,返回结果为null或记录 假如字符串str在由N个子链组成字符串列表strlist ,则返回范围在 1 到 N...如果str不在strlist 或strlist 为空字符串,则返回为 0 。任意一个参数为NULL,则返回为 NULL。这个函数在第一个参数包含一个逗号(‘,’)时将无法正常运行。...总结:like是广泛模糊匹配,字符串没有分隔符,Find_IN_SET 是精确匹配,字段以英文”,”分隔,Find_IN_SET查询结果要小于like查询结果。...”分隔 (1,2,6,8) 查询字段(strlist)包含(str)结果,返回结果为null或记录 假如字符串str在由N个子链组成字符串列表strlist ,则返回范围在 1 到 N...总结:like是广泛模糊匹配,字符串没有分隔符,Find_IN_SET 是精确匹配,字段以英文”,”分隔,Find_IN_SET查询结果要小于like查询结果。

3.5K40

SQL注入绕过简单总结

(NULL 不计入): COUNT() 函数返回表记录数: ASCII(str) 返回字符串str 最左字符ASCII。...假如str为空字符串,则返回为 0 。 ORD(char) 返回字符 ASCII GROUP_CONCAT(expr) 该函数返回带有来自一个组连接非NULL字符串结果。...即将expr数据整合到一起。 CHAR(ascii,…)将一个或多个ascii码( ,分隔)转为字符或字符串。 CONCAT(str1,str2,…) 返回结果为连接参数产生字符串。...常用运算符和关键字 union用于联合查询 (注意:必须要有相同字段数,注入时通常先用order by 测试下有几个字段) '用于闭合语句 不带引号以 0X 开头十六进制MYSQL中会被解释为对应字符串...反引号 用于区分MYSQL保留字与普通字符而引入符号,: SELECT`select`from`test`WHERE`select`='字段';#未使用空格,是一种绕过方式 不等于 !

1.8K10

Mysql数据库常用函数1.0

可以使用逗号分隔多个列来定义主键。...’123456’) 注意类型要和定义字段类型相等 删除表里某条数据(删除整个表,上面写有) delete from 表名 where 字段名=要删除某个字段信息 :delete from...用法如上,返回users表里数量 concat() 没有分隔连接字符串 ? 我们可以先查表字段名, 用select * from users;查询users表里所有信息,第一排就是字段名。...与concat()函数区别是,可以有分隔符,当有NULL时,不会返回NULL ? group_concat() 连接一个组所有字符串,并以逗号分隔每一条数据 ?...extractvalue() 第一个参数:XML_document是String格式,为XML文档对象名称 第二个参数:Xpath_string(Xpath格式字符串) 作用:从目标XML返回包含查询字符串

1.5K30

SQL函数 JSON_OBJECT

[NULL ON NULL | ABSENT ON NULL]) 参数 key:value - 键:对或逗号分隔键:对列表。键是由单引号分隔用户指定文字字符串。...可以是列名、聚合函数、算术表达式、数字或字符串文字或文字NULL。 ABSENT ON NULL NULL ON NULL - 可选-指定如何在返回JSON对象中表示空关键字短语。...描述 JSON_OBJECT接受逗号分隔键:对列表(例如,‘MyKey’:colname),并返回包含这些JSON对象。...Json_object以显示或ODBC模式返回键和(如果这是查询选择模式)。 JSON_OBJECT不支持将星号(*)语法作为指定表中所有字段方式。...通过更改选择模式,所有日期和%LIST都会以该选择模式格式字符串形式包含在JSON对象

2.8K20

concat效率 mysql_Mysql常用函数之Concat函数

大家好,又见面了,我是你们朋友全栈君。 本篇文章主要介绍了MySQLconcat函数用法(连接字符串),在命令行模式下进行测试。 1....MySQLconcat函数 使用方法: CONCAT(str1,str2,…) 返回结果为连接参数产生字符串。如有任何一个参数为NULL ,则返回为 NULL。...MySQLconcat函数可以连接一个或者多个字符串, mysql> select concat(’10’); +————–+ | concat(’10’) | +————–+ | 10 | +——...函数会忽略任何分隔符参数后 NULL 。...连接后以逗号分隔 mysql> select concat_ws(‘,’,’11’,’22’,’33’); +——————————-+ | concat_ws(‘,’,’11’,’22’,’33’)

1.4K40

Grafana系列-统一展示-8-ElasticSearch日志快速搜索仪表板

例如,MySql数据源默认格式是以逗号分隔方式连接多个,并加引号, :'server01', 'server02'.在某些情况下,你可能希望有一个不带引号逗号分隔字符串, :server01...如果指定了任何无效格式化选项,那么 glob 就是默认/回退选项。 CSV 将具有多个变量形成一个逗号分隔字符串。...|test2' Raw 关闭数据源特定格式化,SQL查询单引号。...|test2)' 单引号 将单和多值变量形成一个逗号分隔字符串,在单个中用\'转义',并将每个用'引号括起来。...Notes: 变量上Custom all value选项必须为空,以便Grafana将所有格式化为一个字符串。如果它留空,那么Grafana就会把查询所有连接起来(加在一起)。

72951

MySQL如何分组拼接字符串

主角闪亮✨登场 GROUP_CONCAT(expr) 在 Mysql 官方文档 ,该函数被放在聚合函数章节,如果你要按照指定字段分组拼接,就要配合关键字 GROUP BY 来使用 ?...定义 该函数返回一个字符串结果,该字符串结果是通过分组串联非NULL。如果没有非NULL,则返回NULL。...这里你看到 GROUP_CONCAT 函数拼接字符串默认分隔符是逗号 ,, 领导不开心,逗号感情,要用❕才能体现出关怀强烈, SEPARATOR 关键字就派上用场了 分组拼接之间默认分隔符是逗号...:全局都生效 该语句在执行后,MySQL重启之前一直有作用,一旦重启 MySQL,则会恢复默认 有时候 GROUP_CONCAT() 还要搭配 CONCAT_WS() 发挥出一点点威力,举个简单例子...这意味着我们不能在 IN 运算符中使用GROUP_CONCAT()函数结果,例如,在子查询, 像这样: SELECT id, name FROM table_name WHERE

5.2K31

MySQL字符串分割_c语言中如何截取字符串

分隔字符串拆分 题目要求 数据库 num字段为: 实现效果:需要将一行数据变成多行 实现SQL SELECT SUBSTRING_INDEX(SUBSTRING_INDEX...举例 (1)获取第2个以“,”逗号分隔符之前所有字符。...: 以”,”逗号分隔符,根据 help_topic_id 来截取第n+1个分隔符之前所有的字符串。...当 help_topic_id = 1时,获取到字符串 = 7654,7698 …(以此类推) ---- 第二步: 以”,”逗号分隔符,截取倒数第1个分隔符之后所有字符串。...) ---- 最终成功实现了以下效果 ~ 注:不含分隔字符串拆分可参考 MySQL——字符串拆分(无分隔字符串截取) 如果以上有错误地方,希望大家能够指正 ~ 谢谢 ~ 如果你有更好方法

2.8K10
领券