Мне нужно все значение из массива JSON

#sql #json #sql-server

#sql #json #sql-сервер

Вопрос:

У меня есть таблица, в которой у меня есть данные JSON, а тип поля — NVARCHAR (4000)

     [
        {"number":1,"booked":0},
        {"number":2,"booked":0},
        {"number":3,"booked":0},
        {"number":4,"booked":1},
        {"number":5,"booked":0},
        {"number":6,"booked":0},
        {"number":7,"booked":0},
        {"number":8,"booked":0}
    ]
  

Я хочу запросить это поле массива и хочу, чтобы на выходе было указано, что количество забронированных равно 1, а не забронированных — 7.
Я использовал JSON_VALUE() , JSON_QUERY() функции, но не попал в точку.

Я также хочу, чтобы это число: 4 забронировано.

Я использую SQL Server 2016

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

1. I am using SQL Server 2016 … тогда почему вы отметили MySQL?

Ответ №1:

Привет, если я понимаю все, что вы пытаетесь сделать, этот пример может ответить :

 DECLARE @json NVARCHAR(MAX)
SET @json =  
N'[  
       {"number":1,"booked":0},
        {"number":2,"booked":0},
        {"number":3,"booked":0},
        {"number":4,"booked":1},
        {"number":5,"booked":0},
        {"number":6,"booked":0},
        {"number":7,"booked":0},
        {"number":8,"booked":0}
 ]'  

 SELECT number, booked
FROM OPENJSON(@json) 
    WITH (number int 'strict $.number', booked int   'strict $.booked')
WHERE booked = 1
  

В будущем предложите, пожалуйста, предоставить некоторые данные и исключенный вывод и запросить, что вы пытаетесь.

Ответ №2:

     [
        {"number":1,"booked":0},
        {"number":2,"booked":0},
        {"number":3,"booked":0},
        {"number":4,"booked":1},
        {"number":5,"booked":0},
        {"number":6,"booked":0},
        {"number":7,"booked":0},
        {"number":8,"booked":0}
    ]
  

Выберите запрос:

 SELECT 
 COUNT(JSON_VALUE(jsonInfo,'$.booked')) 
 OVER(PARTITION BY JSON_VALUE(jsonInfo,'$.booked'))
FROM table
GROUP BY JSON_VALUE(jsonInfo,'$.booked')
ORDER BY JSON_VALUE(jsonInfo,'$.booked')