繁体   English   中英

从 SQL 中的 Json 数组中提取所有值

[英]Extract all values from Json Array in SQL

我有 SQL 数据,其中有一列 JSON 数据。 不幸的是,我的数据库只有兼容级别 100。所以我不能使用OPENJSON()

我的 JSON 数据结构如下,它包含测试结果。 我还有列idmodeltype

[
{ "name": "rtc", "value": "pass" }, 
{ "name": "battery", "value": "pass" }, 
{ "name": "connection", "value": "pass" }, 
{ "name": "timer", "value": "pass" }, 
{ "name": "provide", "value": "pass" }, 
{ "name": "request", "value": "fail" }
]

如何获取rtcbatteryconnectiontimerproviderequest pass / fail的单元格的列?

有些产品有所有测试,而有些产品只有少数。

我试过JSON_Value(details, '$.name') ,但这给了我空值。

编辑预期输出表,其中一项工作:

在此处输入图像描述

如果您的 SQL Server 版本支持 JSON,您可以尝试解析存储的 JSON 数据并透视行:

样本数据:

DECLARE @json nvarchar(max) = N'[
{ "name": "rtc", "value": "pass" }, 
{ "name": "battery", "value": "pass" }, 
{ "name": "connection", "value": "pass" }, 
{ "name": "timer", "value": "pass" }, 
{ "name": "provide", "value": "pass" }, 
{ "name": "request", "value": "fail" }
]'
SELECT *
INTO Data
FROM (VALUES (1, @json)) v (id, details)

陈述:

SELECT *
FROM (
   SELECT d.id, j.[name], j.[value]
   FROM Data d
   CROSS APPLY OPENJSON(d.details) WITH (
      [name] nvarchar(50) '$.name',
      [value] nvarchar(4) '$.value'
   ) j
) t
PIVOT (
   MAX([value]) FOR [name] IN ([rtc], [battery], [connection], [timer], [provide], [request])
) p

结果:

ID 实时时钟 电池 联系 计时器 提供 要求
1 经过 经过 经过 经过 经过 失败

请注意,您可能会使用以下语句获得未透视的值:

SELECT d.id, j.[name], j.[value]
FROM Data d
CROSS APPLY OPENJSON(d.details) WITH (
   [name] nvarchar(50) '$.name',
   [value] nvarchar(4) '$.value'
) j

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM