在 JSONB 字段上使用 like 进行查询

Querying using like on JSONB field

我在 PostgreSQL 数据库中有一个字段,其格式为 ["tag1","tag2"] 18=] 并且上面的列存在,这两个标签都被返回。

关于如何做到这一点有什么建议吗?

我尝试了下面的查询,但它不起作用:

SELECT table.tags::JSONB from table where table.tags::TEXT like 't%';

一种方法是使用 jsonb_array_elements_text() 函数 (https://www.postgresql.org/docs/current/static/functions-json.html)

示例测试:

SELECT  *
FROM    jsonb_array_elements_text($$["tag1","tag2","xtag1","ytag1"]$$::jsonb)
WHERE   value LIKE 't%';
 value
-------
 tag1
 tag2
(2 rows)

由于 jsonb_array_elements_text() 创建了一组记录,并且在您的情况下,除了 LIKE 没有其他条件,那么使用 LATERAL (https://www.postgresql.org/docs/9.5/static/queries-table-expressions.html#QUERIES-LATERAL) 应该可以像这样帮助您:

SELECT  T.tags
FROM    table T,
LATERAL jsonb_array_elements_text(T.tags) A
WHERE   A.value LIKE 't%';