Как получить конкретное значение из json с похожими тегами с помощью T-SQL

#json #sql-server-2016

#json #sql-server-2016

Вопрос:

У меня есть nvarchar(max) столбец с большим двоичным объектом json, структурированным следующим образом:

 [
    {"QuestionName":"Question1", "AnswerValue":"123456"},
    {"QuestionName":"Question2", "AnswerValue":"987654"},
    {"QuestionName":"Question3", "AnswerValue":"951753"}
]
  

Я хотел бы сделать это в операции на основе набора, поскольку я извлекаю более 50 тыс. записей. Я хотел бы получить значение ответа where QuestionName = Question2 .

В приведенном выше случае я хотел бы вернуть 987654. Это значение может не находиться в одном и том же месте массива каждый раз.

Я очень зеленый при работе с JSon, не говоря уже об использовании его в SQL Server. Я считаю, что я хочу что-то вроде

 JSON_VALUE(MyJSonColumn, '???')
  

но я не уверен, как на самом деле получить то, что мне нужно.

Комментарии:

1. Эта часть документов Microsoft, похоже, охватывает ваш вопрос.

Ответ №1:

Вы могли бы использовать OPENJSON :

 SELECT a.questionName, a.answerValue
FROM t 
CROSS APPLY OPENJSON(col)
WITH(QuestionName VARCHAR(100) N'$."QuestionName"', AnswerValue INT N'$."AnswerValue"') AS a
WHERE questionName = 'Question2';
  

db<>демонстрация скрипки