从mysql查询中提取json值
Posted
技术标签:
【中文标题】从mysql查询中提取json值【英文标题】:Extracting json value from mysql query 【发布时间】:2021-03-08 06:20:36 【问题描述】:我在 mysql 中有 json 类型的数据,列名是“student_data”。学生数据:
"STUDENT_HISTORY": ["regno": "12345678","UPDATE_DATE_UNIX_TIME": "65667","regno": "12345332","UPDATE_DATE_UNIX_TIME": "654333"]
我需要根据 regno = "12345678" 的条件提取 student_data,这里我只有 regno 值不知道 json 中的索引,我也尝试了下面给出的 json_extract 查询。
SELECT JSON_EXTRACT(student_data,"$.STUDENT_HISTORY.regno")
FROM student table
WHERE STUDENT_HISTORY.regno = "12345678"
【问题讨论】:
格式化您的问题 - 现在无法阅读。以 CREATE TABLE + INSERT INTO 脚本的形式提供示例数据。以文本表格格式显示所需的输出。指定精确的 MySQL 版本。 【参考方案1】:如果你运行的是 MySQL 8.0,你可以使用json_table()
:
select s.*, x.*
from student s
cross join json_table(
s.student_date,
'$.STUDENT_HISTORY' columns (
regno varchar(50),
UPDATE_DATE_UNIX_TIME varchar(50)
)
) x
where x.regno = '12345678'
【讨论】:
Getting syntax error 'ERROR 1064 (42000): 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 ',UPDATE_DATE_UNIX_TIME varchar(50))) x where x.regno ='12345678' at line 1 '附近使用正确的语法 '【参考方案2】:您仍然可以使用JSON_EXTRACT()
进行一些小的更改,例如
SELECT *
FROM student
WHERE JSON_UNQUOTE(JSON_EXTRACT(`student_data`,'$.STUDENT_HISTORY[0].regno'))='12345678'
Demo
【讨论】:
我们需要一个不基于索引的查询。它应该被概括。 regno = '12345678' 只有我们知道这个值。我们不知道 json 中的索引。 @NeelaKandan 好吧,你应该明确解释问题中的逻辑 是的,很可能如果在我的问题中添加了另一个 json,理解会更好让我编辑它。以上是关于从mysql查询中提取json值的主要内容,如果未能解决你的问题,请参考以下文章