Postgresql json 类查询

Postgresql json like query

我有以下 table 称为 module_data。目前它有三行条目:

                id                               data
0ab5203b-9157-4934-8aba-1512afb0abd0 {"title":"Board of Supervisors Meeting","id":"1i3Ytw1mw98"}
7ee33a18-63da-4432-8967-bde5a44347a0 {"title":"Board of Supervisors Meeting","id":"4-dNAg2mn6o"}
8d71ca35-74eb-4751-b635-114bf04843f1 {"title":"COPD 101", "id":"l9O0jCR-sxg"}

列数据的数据类型是 jsonb。我正在尝试使用 like 运算符查询它。类似于以下内容:

SELECT * FROM module_data WHERE title LIKE '%Board%';

我一直在查看 jsonb 支持,但似乎没有 like 运算符。如果有人有什么建议。

如果数据列是文本类型,则使用->> on cast:

select * from module_data where data::json->>'title' like '%Board%'

如果已经 json:

select * from module_data where data->>'title' like '%Board%'

我觉得应该是这样的

select * from module_data where data->>'$."title"' like '%Board%'

只有它对我有用。

对于找到此页面的其他人来说可能就足够的另一个选项是将列转换为文本类型。例如

select * from module_data where data::text like '%Board%'

不过请注意,这将搜索整个 json,并且只有在您可以保证其他字段不会出现问题时才应使用。

我发现以下对于 jsonb 类型的列更直接、更容易:

select * from table_name
where 
column_name::text like '%Something%'

找到一篇关于更多示例和实现的好文章: https://www.compose.com/articles/faster-operations-with-the-jsonb-data-type-in-postgresql/

希望对您有所帮助!