postgres jsonb列中的模糊字符串匹配

时间:2017-09-01 22:35:36

标签: postgresql jsonb

我在postgres表中有一个名为 topics 的jsonb列,它是一个字符串的文字数组。示例记录可能包含主题值:

['healthcare', 'fitness', 'gains', 'doyouevenliftbro']

我需要在许多匹配%lift%

的记录中找到此记录

我在stackoverflow上找到的所有其他查询和pg文档可以作为完整字符串与doyouevenliftbro匹配,或者如果从json_to_recordset()或其他任何内容转换,则可以执行正则表达式匹配,然后他们继续引用JSON中的属性,这是没有的。希望它简单的语法只是回避我。谢谢!

1 个答案:

答案 0 :(得分:2)

您可以使用json_array_elementsjson数组取消嵌套到集合中。一旦它成为一个集合,您就可以应用like运算符并将其放入子查询中。

select *
from your_table
where exists (
  select *
  from json_array_elements(your_table.topics::json)
  where value::text like '%lift%'
);

编辑:更直截了当地说,如果您只是将整个主题数组转换为文本并与之匹配,该怎么办?

select *
from your_table
where topics::text like '%lift%';