一尘不染

PostgreSQL反向喜欢

sql

我需要测试列值的任何部分是否在给定的字符串中,而不是字符串是否是列值的一部分。例如:

这样,我可以找到表中的任何行中是否包含字符串’bricks’ column

SELECT column FROM table
WHERE column ILIKE '%bricks%';

但是,我要寻找的是找出句子中是否有任何部分“ 与砖头不一样的方式悬挂在天空中 ”的句子的任何部分。就像是:

SELECT column FROM table
WHERE 'The ships hung in the sky in much the same way that bricks don鈥檛' ILIKE '%' || column || '%';

因此,第一个示例中的行(其中的列包含“砖”)将显示为结果。

我在这里和其他一些论坛中浏览了一些建议,但没有一个起作用。


阅读 137

收藏
2021-03-17

共1个答案

一尘不染

您的简单案例可以通过使用ANY结构和的简单查询来解决~*

SELECT *
FROM   tbl
WHERE  col ~* ANY (string_to_array('The ships hung in the sky ... bricks don鈥檛', ' '));

~*是不区分大小写的正则表达式匹配运算符。我用这个来代替ILIKE,所以我们可以在字符串中使用的原话,而无需垫%进行ILIKE。结果是相同的-
除了包含特殊字符的单词:%_\forILIKE!$()*+.:<=>?[\]^{|}-for正则表达式模式。您可能需要以任何一种方式转义特殊字符,以免出现意外。这是一个用于正则表达式的函数:

但是我na惑不解,这将是您所需要的。看到我的评论。我怀疑您需要针对自然语言的带有匹配字典的全文搜索,以提供有用的词干…

有关的:

2021-03-17