介绍:JSON_TABLE()函数从一个指定的JSON文档中提取数据并返回一个具有指定列的关系表。
应用:数据库字段以JSON 存储后,实际应用需要对其中一个字段进行查询
语法:JSON_TABLE(json,path COLUMNS(column[,column[,...]]))column:name
实例:
数组分别取值
JSON 数组中有两个对象。
路径表达式 $[*] 则表示数组中的每个元素。
COLUMNS 子句定义了关系表中的 3 个列:
id FOR ORDINALITY: 列名为 id,列的内容为从 1 开始的自增序列。x varchar(255) PATH '$.x': 列名为 x,列的内容是对应了对象中的成员 x。y INT PATH '$.y':列名为 y,列的内容是对应了对象中的成员 y。
select * FROM
JSON_TABLE(
'[{"x": "01", "y": 11}, {"x": "02", "y": 22}]',
'$[*]'
COLUMNS (
id FOR ORDINALITY,
x varchar(255) PATH '$.x',
y INT PATH '$.y'
)
) AS t;
|id |x |y | |---|---|---| |1 |01 |11 | |2 |02 |22 |
直接取值
JSON 数组中有多个对象。
路径表达式 $[*] 则表示数组中的每个元素。
COLUMNS 子句定义了关系表中的 2 个列:
id FOR ORDINALITY: 列名为 id,列的内容为从 1 开始的自增序列。x INT PATH '$': 列名为 x,列的内容是对应了对象的值。
select * FROM
JSON_TABLE(
'["1","11","111"]',
'$[*]'
COLUMNS (
id FOR ORDINALITY,
x INT PATH '$'
)
) AS t;
|id |x | |---|---| |1 |1 | |2 |11 | |3 |111|
备注:MySQL 8.0之后才能使用,否则执行代码会报错
替代查询方法:select * from table where name like '%"1"%'
参考:MySQL JSON_TABLE() 函数|mysql-目之瞬间
好文链接
发表评论