0

我有一张有很多列的表。一列具有json值,例如

{
  "RequiredForCompany":1, 
  "RequiredOnScreen":0,
  "Editable":[],
  "Visible":[], 
  "Expression":{},
  "GroupFields":[142,156]
}

我想通过选择其他列来查询这个 json 值。我的查询就像

SELECT 
    [Name],
    JSON_VALUE(FieldAttributes, '$.GroupFields') AS GroupFields
FROM 
    [std].[Field]

但它为 groupfields 返回 null。有什么方法可以查询这个值?

4

2 回答 2

1

您的 GroupFields (数组)是序列值容器,这就是您必须选择如下的原因

DECLARE @jsonInfo1 NVARCHAR(MAX) =N'{
"RequiredForCompany":1,
"RequiredOnScreen":0,
"Editable":[], 
"Visible":[],
"Expression":{},
"GroupFields":[142,156]

}';


select JSON_VALUE(@jsonInfo1, '$.GroupFields[0]') as g;

https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=7eba8bf042a27253440ce4b41f440979

所以在你的情况下

SELECT [Name],
  JSON_VALUE(FieldAttributes,'$.GroupFields[0]') AS GroupFields
FROM [std].[Field]
于 2018-09-24T04:47:05.253 回答
0

最后我在@Zaynul Abadin Tuhin 的帮助下得到了解决方案。我的查询是

SELECT [Name], STUFF((SELECT ','+[Value] FROM 
  OPENJSON (FieldAttributes,'$.GroupFields') FOR XML PATH ('')),1,1,'') AS GroupFields
FROM [std].[Field]

它工作正常。

于 2018-09-24T05:24:11.243 回答