[英]Extract all values from Json Array in SQL
我有 SQL 数据,其中有一列 JSON 数据。 不幸的是,我的数据库只有兼容级别 100。所以我不能使用OPENJSON()
。
我的 JSON 数据结构如下,它包含测试结果。 我还有列id
、 model
和type
。
[
{ "name": "rtc", "value": "pass" },
{ "name": "battery", "value": "pass" },
{ "name": "connection", "value": "pass" },
{ "name": "timer", "value": "pass" },
{ "name": "provide", "value": "pass" },
{ "name": "request", "value": "fail" }
]
如何获取rtc
、 battery
、 connection
、 timer
、 provide
和request
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.