查询以在 jsonb PSQL 中搜索数组元素
Query to search over array elements inside jsonb PSQL
我有一个 JSON 节点,我必须在其上编写 PSQL 查询,我的 table 模式名称(字符串),tagValues(jsonb)。下面给出了示例 tagValue 数据
Name_TagsTable
uid | name(String)| tagValues(jsonb)
-----+-------------------+-----------------------------
1 | myName | { "tags": ["xyz","pqr","xyp"]}
我需要一个 returns 所有行的查询,以便在 table
的 tagValues 上进行搜索“pq”
select * from Name_TagsTable where tagValues->tags contains %pq%
您可以使用 LIKE
运算符并将 JSONB
值转换为字符串类型,例如
SELECT *
FROM Name_TagsTable
WHERE (tagValues->'tags')::TEXT LIKE '%pq%'
您需要取消嵌套元素,然后您可以在应用 LIKE 条件的 WHERE 条件中使用它。
select nt.*
from name_tagstable nt
where exists (select *
from jsonb_array_elements_text(tagvalue -> 'tags') as a(tag)
where a.tag like '%pg%');
我有一个 JSON 节点,我必须在其上编写 PSQL 查询,我的 table 模式名称(字符串),tagValues(jsonb)。下面给出了示例 tagValue 数据
Name_TagsTable
uid | name(String)| tagValues(jsonb)
-----+-------------------+-----------------------------
1 | myName | { "tags": ["xyz","pqr","xyp"]}
我需要一个 returns 所有行的查询,以便在 table
的 tagValues 上进行搜索“pq”select * from Name_TagsTable where tagValues->tags contains %pq%
您可以使用 LIKE
运算符并将 JSONB
值转换为字符串类型,例如
SELECT *
FROM Name_TagsTable
WHERE (tagValues->'tags')::TEXT LIKE '%pq%'
您需要取消嵌套元素,然后您可以在应用 LIKE 条件的 WHERE 条件中使用它。
select nt.*
from name_tagstable nt
where exists (select *
from jsonb_array_elements_text(tagvalue -> 'tags') as a(tag)
where a.tag like '%pg%');