Bogatyr
@Bogatyr

Как получить данные из JSON по длине строки?

Привет Всем!
Подскажите пожалуйста как сделать выборку из JSON? JSON представляет из себя следующее:
{"@class": "Name.Of.Class, "member": "666", "Members": [{"values": ["111", "222", "333"], "Type": "BIG", "Number": "111111", "Count": 50, "BIGUnit": 50}, {"values": ["111", "222", "333"],"BIGType":"BIG","Number": "111", "Count": 10, "BIGUnit": 10}, {"values": ["111", "222", "333"], "BIGType": "BIG", "Number": "222", "Count": 10, "BIGUnit": 10}, {"values": ["111", "222", "333"], "BIGType": "BIG","Number": "333", "Count": 10, "BIGUnit": 10}, {"values": ["111", "222", "333"], "BIGType": "BIG", "Number": "333333", "Count": 10, "BIGUnit": 10}], "ID": "07"}


Необходимо выдать все значения Number > 3.

Пробовал вот такой скрипт:
SELECT
c_date AS cd,
JSON_UNQUOTE(JSON_EXTRACT(jsonc,"$.Members[*].Number")) AS rep,
id AS did
FROM reports
WHERE length(JSON_UNQUOTE(JSON_EXTRACT(jsonc,"$.Members[*].Number"))) > 3;


c_date - Дата, jsonc - столбец с JSON, id есть id.

Причем если условие убрать, то скрипт возвращает ВСЕ значения Number, а нужны только те, что > 3. А если с условием, то возвращает NULL.

Помогите пожалуйста!
  • Вопрос задан
  • 123 просмотра
Решения вопроса 1
Bogatyr
@Bogatyr Автор вопроса
SELECT cte1.cdate AS cd, 
       JSON_UNQUOTE(JSON_EXTRACT(cte1.rep, CONCAT('$[', cte2.num, ']'))) AS rep, 
       cte1.id AS did
FROM ( SELECT cdate, 
              id, 
              JSON_EXTRACT(jsonc,"$.Members[*].Number") AS rep
       FROM reports ) cte1, 
     ( SELECT help_keyword_id num
       FROM mysql.help_keyword ) cte2
HAVING LENGTH(rep) > 3
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@zhaar
А тебе условие number нужно рассматривать как строку или число? Сейчас по условию он отбирает у тебя все, что содержит не менее 4 символов.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы