#sql #json #postgresql
Вопрос:
Я ищу способ узнать, существует ли строка в столбце Postgres типа «jsonb», которая имеет значения, подобные приведенным ниже:
id | numbers(jsonb)
1 | ["54954565","16516516","565196212"]
2 | ["195195159","252432","275782872"]
3 | ["54954565","61595161","728278"]
4 | ["245735435","75454","2782"]
Напр.:
Если «16516516» существует в массиве, соответствующем любой записи в числах, я хочу получить всю строку.
Поэтому, если я запрошу «16516516».
Строка, которую я получаю, должна быть:
id | numbers
1 | ["54954565","16516516","565196212"]```
Ответ №1:
Ответ №2:
Используйте оператор contains @>
SELECT * FROM t
WHERE numbers @> '["16516516"]'
Демонстрационная база данных<>скрипка<>:
WITH t (id ,numbers) AS (
VALUES (1,'["54954565","16516516","565196212"]'::jsonb),
(2,'["195195159","252432","275782872"]'::jsonb),
(3,'["54954565","61595161","728278"]'::jsonb),
(4,'["245735435","75454","2782"]'::jsonb)
)
SELECT *
FROM t WHERE numbers @> '["16516516"]';
id | numbers
---- ---------------------------------------
1 | ["54954565", "16516516", "565196212"]
(1 row)