如何在PosgreSQL中匹配两个记录值之间的子字符串?

How to match a substring between two record values in PosgreSQL?

提问人:Danon 提问时间:7/20/2022 更新时间:7/20/2022 访问量:64

问:

我正在寻找一种解决方案来匹配 PostgreSQL 中的两个隐藏字符串。一条记录的值是子字符串,第二条记录是要匹配的文本。代码思路如下所示:

SELECT text_1, text_2
FROM texts
WHERE text_1 SIMILAR TO text_2;

首选输出如下所示:

text_1, text_2
______________
foo_, foo_bar
sta, stack
love, ilove2code

Python 的最佳类似物:

if text_1 in text_2: ...
sql 字符串 postgresql 匹配 where-clause

评论

1赞 jarlh 7/20/2022
只是?where text_2 like '%' || text_1 || '%'

答:

1赞 Kashyap 7/20/2022 #1

您可以使用 PostgreSQL pg_trgm扩展。

pg_trgm- 在这里,您可以轻松找到相似度函数<->

你可以像这样使用它

文本1 <->文本2

1赞 Jeremy 7/20/2022 #2

获得与 python 语法最相似的行为的最简单方法是使用 strpos:in

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

使用像 '%' 这样的text_2的问题 ||text_1 ||'%' 或 text_2 ~ text_1 或类似的模式匹配是你必须确保你的模式不包含任何会影响匹配的特殊字符。

这里有一个小提琴,演示了解决方案和其他问题。