postgres jsonb列中的模糊字符串匹配
Posted
技术标签:
【中文标题】postgres jsonb列中的模糊字符串匹配【英文标题】:Fuzzy string match in postgres jsonb column 【发布时间】:2017-09-01 22:35:36 【问题描述】:我在名为 topics 的 postgres 表中有一个 jsonb 列,它是字符串的文字数组。 topics 值的示例记录可能包含此值:
['healthcare', 'fitness', 'gains', 'doyouevenliftbro']
我需要在许多匹配%lift%
的记录中找到这条记录
我在 *** 上找到的所有其他查询和 pg 文档都可以匹配 doyouevenliftbro
作为一个完整的字符串,或者如果这是从 json_to_recordset()
或其他任何东西转换的,则可以进行正则表达式匹配,但随后它们会继续引用 JSON 中没有的属性。希望它只是逃避我的简单语法。谢谢!
【问题讨论】:
【参考方案1】:您可以使用json_array_elements
将json
数组取消嵌套到一个集合中。集合后,您可以应用 like
运算符并将其放入子查询中。
select *
from your_table
where exists (
select *
from json_array_elements(your_table.topics::json)
where value::text like '%lift%'
);
编辑:更直接地说,如果你只是将整个 topics 数组转换为文本并与之匹配呢?
select *
from your_table
where topics::text like '%lift%';
【讨论】:
这看起来很有希望 - 我今天会尝试并在我确认时更新它。谢谢!以上是关于postgres jsonb列中的模糊字符串匹配的主要内容,如果未能解决你的问题,请参考以下文章
使用 Postgres/Knex 在 JSONB 列中存储对象
如何使用 Slick 在 Postgres 中将 json 对象插入到 jsonb 类型的列中