Как проверить строку JSON на содержит поле И как значение? - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть JSON:

[{"name": "Criss", "idNumber": "2177"}, {"name": "Kate", "idNumber": "6234"}]
[{"name": "Alex"}, {"name": "Paul"}]
[{"name": "Emma", "idNumber": "2056"}, {"name": "Isabella", "idNumber": "8832"}]
[{"name": "Olivia", "idNumber": "2163"}, {"name": "Greck", "idNumber": "8585"}]

Мне нужно найти все строки, которые содержат поле idNumber , а также значение должно быть like '21%'

Я использую@> оператор для проверки содержит.Но как проверить на LIKE?

Ожидаемый результат:

[{"name": "Criss", "idNumber": "2177"}, {"name": "Kate", "idNumber": "6234"}]
[{"name": "Olivia", "idNumber": "2163"}, {"name": "Greck", "idNumber": "8585"}]

1 Ответ

0 голосов
/ 13 декабря 2018

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

Это можно сделать в связанном подзапросе:

select t1.*
from the_table t1
where exists (select *
              from jsonb_array_elements(t1.d) as x(e)
              where x.e ->> 'idNumber' like '21%');

Нет необходимости проверять наличие ключа idNumber отдельно, так как ->> вернет null если ключа нет.

Онлайн пример: https://rextester.com/KZY46113

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...