我正试图从存储在SQL Server数据库中的JSON数组中提取一些信息。我可以看出我需要使用OPENJSON,我已经找到了许多如何使用它的例子,但问题是所有的例子都演示了将单个JSON数组声明为变量并使用OPENZSON打开它(例如,如何在SQL Server 2016中使用OPENKSON读取JSON中带空格的字段名(。我想知道如何将其实际构建到数据库查询中。
数据库表结构示例:
表:HELP_INFO
UID | ID | JSON |
---|---|---|
1 | 45745 | JSON varchar-下面的示例 |
2 | 45745 | >JSON varchar-下面的示例 |
3 | 82567 | >JSON varchar-下面的示例 |
您需要一个具有适当path
的OPENJSON()
调用来访问嵌套的$.source_info.help_info.details
JSON数组,并需要STRING_AGG()
来聚合名称:
样本数据:
SELECT *
INTO Data
FROM (VALUES
(1, 45745, '{"source":"XYZ",
"source_info":{
"type":"need_help",
"help_info":{
"questions":50,
"details":[{"floatv":0.42,"name":"Tom"},{"floatv":1.08,"name":"Dick"},{"floatv":1.2,"name":"Harry"}]}}}')
) v (UID, ID, JSON)
声明:
SELECT
ID,
NAMES = (
SELECT STRING_AGG(JSON_VALUE([value], '$.name'), ' ')
WITHIN GROUP (ORDER BY CONVERT(int, [key]))
FROM OPENJSON(JSON, '$.source_info.help_info.details')
)
FROM Data