You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL:如何对JSON列进行字符串模式匹配查询

在PostgreSQL中对JSON列的特定键值做子串匹配查询

没问题,我来帮你搞定这个需求!针对你提到的JSON列(比如示例里的{"foo": "hello", "bar": "world"}),要在bar键的取值里搜索包含orld的子串,其实用PostgreSQL自带的JSON操作符就能轻松实现,不用复杂的语法。

最常用的方法:用->>提取文本后匹配

->>操作符的作用是把JSON对象中指定键对应的值转换成文本类型,这样就能直接用我们熟悉的LIKE或ILIKE做模糊匹配了。

针对你的场景,对应的SQL语句是:

SELECT * FROM fooTable
WHERE myjson ->> 'bar' LIKE '%orld%';
  • 这里的%是通配符,%orld%表示匹配包含orld的任意字符串;
  • 如果要匹配以orld结尾的字符串,就写成'%orld';
  • 如果要匹配以orld开头的字符串,就写成'orld%'。

大小写不敏感的匹配

如果需要忽略大小写(比如要匹配Orld、ORLD等),把LIKE换成ILIKE就行:

SELECT * FROM fooTable
WHERE myjson ->> 'bar' ILIKE '%orld%';

备选方法:用json_extract_path_text函数

如果你习惯用函数式的写法,也可以用json_extract_path_text来提取键值,效果和->>完全一样:

SELECT * FROM fooTable
WHERE json_extract_path_text(myjson, 'bar') LIKE '%orld%';

不过->>更简洁,日常开发里用得更多。

性能优化小技巧

如果这个查询是高频使用的,建议给myjson ->> 'bar'创建一个索引,能大幅提升查询速度:

CREATE INDEX idx_footable_myjson_bar ON fooTable ((myjson ->> 'bar'));

另外,建议优先使用jsonb类型存储JSON数据(而不是json类型),jsonb支持更多的索引类型和操作,性能也更优,上面的操作符对jsonb同样适用。

内容的提问来源于stack exchange,提问作者irregular

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:26:49