Вы можете присоединить свою таблицу к набору из jsonb_array_elements(jsdata->'dates_of_births')
, а затем отфильтровать желаемое имя или дату рождения с помощью оператора @>
, , который проверяет, содержит ли левое значение JSON right JSON записи пути / значения на верхнем уровне ,
и добавить операторы ->>
, чтобы извлечь соответствующие значения для ключей или индексов в списке SELECT, например:
SELECT j.value ->> 0 AS "DOB",
(j.value ->> 1)::jsonb ->> 'first_name' AS "First Name",
(j.value ->> 1)::jsonb ->> 'last_name' AS "Last Name"
FROM t
CROSS JOIN jsonb_array_elements(jsdata->'dates_of_births') AS j
WHERE j @> '[{"first_name": "efgh"}]'::jsonb
ИЛИ
SELECT j.value ->> 0 AS "DOB",
(j.value ->> 1)::jsonb ->> 'first_name' AS "First Name",
(j.value ->> 1)::jsonb ->> 'last_name' AS "Last Name"
FROM t
CROSS JOIN jsonb_array_elements(jsdata->'dates_of_births') AS j
WHERE j @> '["2009-08-12"]'::jsonb
Демо