目录
[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定时任务-事件调度器(Event Scheduler)_mysql event scheduler-CSDN博客
修改mysql的group_concat函数长度限制,解决数据莫名其妙丢失问题_修改group concat长度之后无效-CSDN博客