如何使用JSON_VALUE为JSON数据设置多个过滤器?

时间:2018-10-21 14:27:53

标签: sql json sql-server tsql sql-server-2017

我只是试图设置一个查询以从对象JSON的集合中获取数据:

create table test (LINE_SPECS nvarchar(max));

insert into test values (N'
 {
  "lineName":"GHjr",
  "pipeDiameter":"12",
  "pipeLength":"52000",
  "pressure":"15",
  "volume":"107"
 },
 {
  "lineName":"Ks3R",
  "pipeDiameter":"9",
  "pipeLength":"40000",
  "pressure":"15",
  "volume":"80"
 }
');

现在,成功获取第一个对象的lineName(lineName:Ghjr)

    select
      JSON_VALUE(LINE_SPECS, '$.lineName')     as line_name
    , JSON_VALUE(LINE_SPECS, '$.pipeDiameter') as diameter

from test
WHERE JSON_VALUE(LINE_SPECS, '$.lineName') = 'GHjr' 
;

当我尝试获取第二个“ Ks3R”时是不可能的:

    select
      JSON_VALUE(LINE_SPECS, '$.lineName')     as line_name
    , JSON_VALUE(LINE_SPECS, '$.pipeDiameter') as diameter

from test
WHERE JSON_VALUE(LINE_SPECS, '$.lineName') = 'Ks3R' 

我该怎么做? 谢谢。

1 个答案:

答案 0 :(得分:3)

首先,您的200数据无效,它可能是数组。

看起来像这样。

JSON

您可以尝试将create table test (LINE_SPECS nvarchar(max)); insert into test values (N' [ { "lineName":"GHjr", "pipeDiameter":"12", "pipeLength":"52000", "pressure":"15", "volume":"107" }, { "lineName":"Ks3R", "pipeDiameter":"9", "pipeLength":"40000", "pressure":"15", "volume":"80" } ]'); OPENJSON结合使用来解析CROSS APPLY

JSON

sqlfiddle