Как использовать SQL Server 2016 для выбора массива JSON, где

#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'
);
 

db<>скрипка