【问题标题】:Extracting json value from mysql query从mysql查询中提取json值
【发布时间】: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 版本。

标签: mysql arrays json json-extract


【解决方案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,理解会更好让我编辑它。
猜你喜欢
  • 2020-10-06
  • 1970-01-01
  • 1970-01-01
  • 2020-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多