【问题标题】:MySQL JSON_EXTRACT() Query returns nullMySQL JSON_EXTRACT() 查询返回 null
【发布时间】:2019-11-26 08:05:26
【问题描述】:

我在MYSQL 数据库中有以下JSON-File

[
{
    "order" : 0,
    "value" : 0.168257
},
{
    "order" : 0.031250,
    "value" : 0.002387
},
{
    "order" : 0.062500,
    "value" : 0.002367
},
{
    "order" : 0.093750,
    "value" : 0.002365
},
{
    "order" : 0.125000,
    "value" : 0.002369
},
{
    "order" : 0.156250,
    "value" : 0.002384
   },
   {
    "order" : 0.187500,
    "value" : 0.002403
   }
]

我想查询“order”=0.156250的结果 我使用以下查询:

JSON_EXTRACT(jsonColumn,'$.order') ... WHERE JSON_EXTRACT(jsonColumn,'$.order') = 0.156250

它不工作。 我只能通过执行以下操作来选择列:

Select JSON_EXTRACT(jsonColumn,'$[5].order')

有人可以告诉我如何在不将index 提供给 Select 语句的情况下选择列吗?

谢谢!

【问题讨论】:

  • 哪个版本的 MySQL?
  • 另外,这些值是数字还是字符串?
  • MySQL 版本 5.7 还是 8.0?
  • MySQL 8.0 版

标签: mysql json extract


【解决方案1】:

过滤前需要先将其转换为json_table

select *
     from
test t1
cross join 
       json_table(t1.jsonColumn,
         "$[*]"
         columns(
           `Order` numeric(9,6) path "$.order",        
           `Value` numeric(9,6) path "$.value"
         )
       ) t2
where t2.Order = 0.156250

dbfiddle

对于mySQL 版本5.7

select
  *  
from test t1  
cross join ( 
  select  1 as col1 union
  select  2 union
  select  3 union
  select  4 union
  select  5 union
  select  6   
  ) t2
where json_extract(t1.jsonColumn, concat('$[', t2.col1, '].order')) = 0.156250;

dbfiddle

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-10
    • 2021-02-24
    • 1970-01-01
    相关资源
    最近更新 更多