mysql 匹配JSON中的某个字段

表中有一个字段,它的类型是JSON,我想要匹配这个JSON串中的某个字段的值

在 MySQL 中,如果某个字段是 JSON 类型,并且你需要查询 JSON 数据中 name 等于 "张三" 的所有记录,可以使用JSON_EXTRACT函数或 ->> 运算符来提取 JSON 数据中的值,然后在 WHERE 子句中进行过滤。

假设你有一个表 users,其中有一个字段 data 是 JSON 类型,并且 JSON 数据的结构如下:

json 复制代码
{
    "name": "张三",
    "age": 30
}

你可以使用以下两种方法来查询 name 为 "张三" 的记录。

方法 1: 使用 JSON_EXTRACT

sql 复制代码
SELECT * 
FROM users 
WHERE JSON_EXTRACT(data, '$.name') = '张三';

方法 2: 使用 ->> 运算符

sql 复制代码
SELECT * 
FROM users 
WHERE data->>'$.name' = '张三';

解释

JSON_EXTRACT(data, '$.name'):从 JSON 字段 data 中提取 name 的值。
->> '$.name':这是 MySQL 的简化语法,用于直接提取 JSON 中的某个键的值,并以字符串形式返回。

注意

这两种方法返回的值都是字符串,因此在 WHERE 子句中直接比较即可。

如果 name 键不总是存在或者存在多个相同的键(例如一个数组中的对象),则需要根据具体的 JSON 结构调整查询条件。

示例数据和查询

假设表 users 的结构如下:

sql 复制代码
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    data JSON
);

插入一些示例数据:

sql 复制代码
INSERT INTO users (data) VALUES
('{"name": "张三", "age": 30}'),
('{"name": "李四", "age": 25}'),
('{"name": "王五", "age": 28}');

查询 name 为 "张三" 的记录:

sql 复制代码
SELECT * 
FROM users 
WHERE data->>'$.name' = '张三';

这个查询将返回第一条记录。

相关推荐
tan180°3 小时前
MySQL表的操作(3)
linux·数据库·c++·vscode·后端·mysql
DuelCode4 小时前
Windows VMWare Centos Docker部署Springboot 应用实现文件上传返回文件http链接
java·spring boot·mysql·nginx·docker·centos·mybatis
幽络源小助理4 小时前
SpringBoot基于Mysql的商业辅助决策系统设计与实现
java·vue.js·spring boot·后端·mysql·spring
爬山算法5 小时前
MySQL(116)如何监控负载均衡状态?
数据库·mysql·负载均衡
百锦再9 小时前
.Net配置文件appsetting.json的几种读取方法
chrome·json·.net·依赖注入·appsetting·web.config
KellenKellenHao14 小时前
MySQL数据库主从复制
数据库·mysql
SH11HF15 小时前
小菜狗的云计算之旅,今天学习MySQL数据库基础知识及操作
adb
一只fish16 小时前
MySQL 8.0 OCP 1Z0-908 题目解析(16)
数据库·mysql
叁沐17 小时前
MySQL 07 行锁功过:怎么减少行锁对性能的影响?
mysql
Java烘焙师17 小时前
架构师必备:业务扩展模式选型
mysql·elasticsearch·架构·hbase·多维度查询