MySQL 语句解析json字符串

目录

[1. 提取 JSON 值](#1. 提取 JSON 值)

[2. 提取嵌套 JSON 值](#2. 提取嵌套 JSON 值)

[3. 提取 JSON 数组中的值](#3. 提取 JSON 数组中的值)

[4. 更新 JSON 值](#4. 更新 JSON 值)

[5. 检查 JSON 值是否存在](#5. 检查 JSON 值是否存在)

[6. 将 JSON 数据转换为表格形式](#6. 将 JSON 数据转换为表格形式)

实际案例


在 MySQL 5.7 及以上版本中,可以使用内置的 JSON 函数来解析 JSON 格式的字符串。以下是一些常见的操作和示例:

1. 提取 JSON 值

使用 JSON_EXTRACT() 函数或 -> 操作符从 JSON 字符串中提取值。

示例:

sql复制

复制代码
SELECT JSON_EXTRACT(json_column, '$.key') AS value
FROM table_name;

或者使用 -> 操作符:

复制代码
SELECT json_column->'$.key' AS value
FROM table_name;

解释:

  • json_column 是存储 JSON 数据的列名。

  • '$.key' 是 JSON 路径表达式,用于指定要提取的键。

2. 提取嵌套 JSON 值

如果 JSON 数据是嵌套的,可以使用更复杂的路径表达式。

示例:

复制代码
SELECT JSON_EXTRACT(json_column, '$.nested.key') AS nested_value
FROM table_name;

3. 提取 JSON 数组中的值

如果 JSON 数据是数组,可以使用索引来提取特定位置的值。

示例:

复制代码
SELECT JSON_EXTRACT(json_column, '$[0]') AS first_element
FROM table_name;

4. 更新 JSON 值

使用 JSON_SET() 函数来更新 JSON 数据中的值。

示例:

复制代码
UPDATE table_name
SET json_column = JSON_SET(json_column, '$.key', 'new_value')
WHERE condition;

5. 检查 JSON 值是否存在

使用 JSON_CONTAINS() 函数来检查 JSON 数据中是否包含某个值。

示例:

复制代码
SELECT *
FROM table_name
WHERE JSON_CONTAINS(json_column, '"value"', '$.key');

6. 将 JSON 数据转换为表格形式

如果需要将 JSON 数据转换为表格形式,可以结合 JSON_EXTRACT()CROSS JOIN 来实现。

示例:

复制代码
SELECT 
  JSON_EXTRACT(json_column, '$.key1') AS key1,
  JSON_EXTRACT(json_column, '$.key2') AS key2
FROM table_name;

实际案例

假设有一个表 users,其中有一列 profile 存储 JSON 数据:

id profile
1 {"name": "Alice", "age": 30}
2 {"name": "Bob", "age": 25}

提取 name 字段:

复制代码
SELECT id, JSON_EXTRACT(profile, '$.name') AS name
FROM users;

结果:

id name
1 Alice
2 Bob

提取 age 字段:

复制代码
SELECT id, profile->'$.age' AS age
FROM users;

结果:

id age
1 30
2 25

更新 age 字段:

复制代码
UPDATE users
SET profile = JSON_SET(profile, '$.age', 31)
WHERE id = 1;

检查 name 是否为 "Alice":

复制代码
SELECT *
FROM users
WHERE JSON_CONTAINS(profile, '"Alice"', '$.name');

其他资料:

StarRocks语句解析json字符串的方法-CSDN博客

MySQL时间函数详解-CSDN博客

MySQL中生成随机数的方法-CSDN博客

mysql定时任务-事件调度器(Event Scheduler)_mysql event scheduler-CSDN博客

修改mysql的group_concat函数长度限制,解决数据莫名其妙丢失问题_修改group concat长度之后无效-CSDN博客

相关推荐
huihui45015 分钟前
一天一道Sql题(day01)
数据库
~尼卡~17 分钟前
软考(软件设计师)数据库原理:事务管理,备份恢复,并发控制
数据库·软件设计师-软考
八九燕来25 分钟前
Django双下划线查询
数据库·django·sqlite
眠りたいです1 小时前
Mysql常用内置函数,复合查询及内外连接
linux·数据库·c++·mysql
paopaokaka_luck1 小时前
智能推荐社交分享小程序(websocket即时通讯、协同过滤算法、时间衰减因子模型、热度得分算法)
数据库·vue.js·spring boot·后端·websocket·小程序
M1A12 小时前
Java 面试系列第一弹:基础问题大盘点
java·后端·mysql
He.ZaoCha2 小时前
函数-1-字符串函数
数据库·sql·mysql
二当家的素材网2 小时前
Centos和麒麟系统如何每天晚上2点10分定时备份达梦数据库
linux·数据库·centos
白仑色2 小时前
Oracle 存储过程、函数与触发器
数据库·oracle·数据库开发·存储过程·plsql编程
叁沐2 小时前
MySQL 09 普通索引和唯一索引,应该怎么选择?
mysql