#arrays #json #sql-server
Вопрос:
{
"NameDetailInfo": [{
"cName": "Tony",
"sex": "M"
}, {
"cName": "Lucy",
"sex": "M"
}, {
"cName": "Lily",
"sex": "M"
}, {
"cName": "Ben",
"sex": "M"
}, {
"cName": "Daa",
"sex": "F"
}, {
"cName": "Kode",
"sex": "F"
}, {
"cName": "Andy",
"sex": "F"
}, {
"cName": "Koya",
"sex": "F"
},{
"cName": "Kay",
"sex": "M"
}]
}
Я хочу выбрать этот массив cName
.
select *
from CD_Name_List
where JSON_VALUE(CD_Name_List.MemberJSON,'$.NameDetailInfo[0].cName') = 'Kay'
Это просто выберите NameDetailInfo[0]
, но я хочу выбрать весь массив.
Ответ №1:
Вы можете использовать OPENJSON
для разбиения массива
SELECT j.cName, j.sex
FROM CD_Name_List nl
CROSS APPLY OPENJSON (nl.MemberJSON, '$.NameDetailInfo')
WITH (cName nvarchar(100), sex char(1)) j
WHERE j.cName = 'Kay';
Или, если вы имели в виду, что хотите выбрать весь массив, если такой элемент существует, вы можете использовать OPENJSON
в подзапросе
SELECT nl.*
FROM CD_Name_List nl
WHERE EXISTS (SELECT 1
FROM OPENJSON (nl.MemberJSON, '$.NameDetailInfo')
WITH (cName nvarchar(100)) j
WHERE j.cName = 'Kay'
);