gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 03:04:29 26 4
gpt4 key购买 nike

我只是想设置一个查询以从对象 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"
}
]');

你可以尝试使用OPENJSON使用 CROSS 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

关于sql - 如何使用 JSON_VALUE 对 JSON 数据设置多个过滤器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52916337/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com