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

如何在PostgreSQL中判断一个记录值是否为另一个的子串?

PostgreSQL中筛选子串匹配记录的解决方案

你的需求是筛选出text_1作为text_2子串的记录,等价于Python中的text_1 in text_2逻辑。原代码里用的SIMILAR TO无法实现这个效果——它要求字符串完全匹配或符合特定正则模式,而非子串包含。

以下是几种可行的实现方式:

方法1:使用LIKE操作符

通过通配符%匹配任意长度的字符,把text_1包裹在通配符之间,就能判断text_2是否包含text_1:

SELECT text_1, text_2
FROM texts
WHERE text_2 LIKE '%' || text_1 || '%';

方法2:使用POSITION函数

POSITION(substr IN str)返回子串在目标字符串中的起始位置,找不到则返回0,判断结果大于0即可:

SELECT text_1, text_2
FROM texts
WHERE POSITION(text_1 IN text_2) > 0;

方法3:使用STRPOS函数

STRPOS(str, substr)和POSITION功能一致,只是参数顺序相反:

SELECT text_1, text_2
FROM texts
WHERE STRPOS(text_2, text_1) > 0;

额外说明

如果需要排除text_1为空字符串的情况(空串会匹配所有text_2),可以追加过滤条件:

SELECT text_1, text_2
FROM texts
WHERE STRPOS(text_2, text_1) > 0
  AND text_1 <> '';

以上方法都能返回你期望的输出,例如:

text_1 | text_2
--------+---------
foo_   | foo_bar
sta    | stack
love   | ilove2code

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 09:15:41