PostgreSQL中如何用LIKE子句匹配JSONB字段的文本内容?
解决PostgreSQL jsonb字段LIKE查询无结果的问题
问题根源
当你通过doc['title']获取jsonb类型的字段值再强制转换为text时,结果会保留JSON字符串的双引号包裹。比如存储的title实际值是Personal group,转换后会变成"Personal group",这就导致你的LIKE条件'P%'无法匹配——因为字符串开头是双引号,而非字母P。你用doc['title'] = '"Personal group"'能查到数据,也印证了这一点。
解决方案
方法1:使用->>操作符(推荐)
->>操作符可以直接从jsonb字段中提取不带双引号的文本值,是最简洁高效的方式:
select docid from groups where doc ->> 'title' like 'P%';
方法2:使用jsonb_extract_text函数
和->>效果一致,属于函数形式的写法:
select docid from groups where jsonb_extract_text(doc, 'title') like 'P%';
方法3:去除双引号后匹配(不推荐)
如果一定要保留cast的写法,可以通过trim函数去掉首尾的双引号再匹配:
select docid from groups where trim(both '"' from (doc['title'])::text) like 'P%';
内容的提问来源于stack exchange,提问作者RJM
相关产品推荐
相关产品推荐

