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

How to set more than a filter over JSON data using JSON_VALUE?

我只是想设置一个查询以从对象集合中获取数据 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' 

我该怎么做? 谢谢。

首先你的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"
 }
]');

你可以尝试使用OPENJSONCROSS APPLY来解析JSON并制作

select
     t2.*
from test t1 
CROSS APPLY 
    OPENJSON(t1.LINE_SPECS)
    WITH
        (
            line_name varchar(MAX) N'$.lineName',
            diameter varchar(MAX) N'$.pipeDiameter'
        ) AS t2
WHERE line_name  = 'Ks3R'

sqlfiddle