2017-09-01 915 views
3

我有一个postgres表中的jsonb列,名为主题这是一个字符串的字面数组。一个例子记录可能有这样一个主题值:postgres jsonb列中的模糊字符串匹配

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

我需要找到在许多这个纪录这将匹配%lift%

所有我发现在计算器和其他查询pg文档可以匹配doyouevenliftbro作为一个完整的字符串,或者可以做一个正则表达式匹配,如果这是从json_to_recordset()或其他任何东西转换,但然后他们继续引用JSON内部的属性,这没有。希望它是简单的语法,只是逃避我。谢谢!

回答

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%'; 
+0

这看起来很有希望 - 我会在今天尝试并在我确认时更新。谢谢! – AlienWebguy