1

我的表中有一列保存的 json 数据:

declare @json nvarchar(max)
set @json = N'
{
    "Companies": [
        {
            "CompanyId": "A",
            "Employee": null
        },
        {
            "CompanyId": "B",
            "Employee": [
                {
                    "EmployeePictureId": null,
                    "Name": "Employee1"
                },
                {
                    "EmployeePictureId": "PictureId2",
                    "Name": "Employee2"
                }
            ]
        },
        {
            "CompanyId": "C",
            "Employee": [
                {
                    "EmployeePictureId": null,
                    "Name": "Employee3"
                },
                {
                    "EmployeePictureId": null,
                    "Name": "Employee4"
                }
            ]
        }
    ]
}
'

是否有可能得到如下结果:

{
   "EmployeePictureIds": ["PictureId2"]
}

使用Json_Query, Json_Value, OPENJSON...

仅获取EmployeePictureId和跳过空(null)数据

顺便说一句,数组中元素的数量不确定。

4

1 回答 1

0

在 SQL Server 2017 中,您可以使用以下查询:

select json_query(QUOTENAME(STRING_AGG('"' + STRING_ESCAPE( A.EmployeePictureId , 'json') 
                  + '"', char(44)))) as [EmployeePictureIds]
FROM OPENJSON(@json, '$.Companies')
WITH 
( 
  CompanyId  NVARCHAR(MAX),
  Employee  NVARCHAR(MAX)  as json  
) as B
cross apply openjson (B.Employee)  
with  
(  
    EmployeePictureId VARCHAR(50),  
    [Name] VARCHAR(50)
) as A     
where A.EmployeePictureId is not null
for json path , WITHOUT_ARRAY_WRAPPER

您提供的 JSON 的结果:

在此处输入图像描述

结果添加另一个非 null EmployeePictureId

在此处输入图像描述

于 2018-05-23T12:44:22.847 回答