Запросы в массивы с помощью JSON_VALUE - PullRequest
0 голосов
/ 26 мая 2019

У меня есть поле со следующими данными JSON

[
   {
      "@odata.type":"#Sitecore.XConnect.Goal",
      "CustomValues":[

      ],
      "DefinitionId":"82c4c49c-b6b2-4b02-8e2f-fbcba9f92fe4",
      "EngagementValue":60,
      "Id":"335c92ce-5e36-4b13-9472-4940ad66e75f",
      "Timestamp":"2019-05-07T23:53:34.4268677Z"
   }
]

Я пытаюсь найти все строки SQL, у которых поле @odata.type равно #Sitecore.XConnect.Goal. Но это внутри массива. Я попробовал SQL ниже, но не могу вернуть строки SQL.

SELECT *
  FROM [usms_Xdb.Collection.Shard0].[xdb_collection].[Interactions]
  WHERE JSON_VALUE([Events], '$.[0]"odata.type"') = '#Sitecore.XConnect.Goal'

1 Ответ

1 голос
/ 26 мая 2019

Вам необходимо указать путь как '$[0]."@odata.type"' (отсутствует оператор точки ., указывающий на член вашего $[0] объекта).

SELECT *
FROM [usms_Xdb.Collection.Shard0].[xdb_collection].[Interactions]
WHERE JSON_VALUE([Events], '$[0]."@odata.type"') = '#Sitecore.XConnect.Goal'

Пример:

DECLARE @json nvarchar(max) = N'[
   {
      "@odata.type":"#Sitecore.XConnect.Goal",
      "CustomValues":[

      ],
      "DefinitionId":"82c4c49c-b6b2-4b02-8e2f-fbcba9f92fe4",
      "EngagementValue":60,
      "Id":"335c92ce-5e36-4b13-9472-4940ad66e75f",
      "Timestamp":"2019-05-07T23:53:34.4268677Z"
   }
]'

SELECT JSON_VALUE(@json, '$[0]."@odata.type"') AS JsonValue

Вывод:

----------------------- 
JsonValue
----------------------- 
#Sitecore.XConnect.Goal
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...