我需要测试列值的任何部分是否在给定的字符串中,而不是字符串是否是列值的一部分。例如:
这样,我可以找到表中的任何行中是否包含字符串’bricks’ column:
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 || '%';
因此,第一个示例中的行(其中的列包含“砖”)将显示为结果。
我在这里和其他一些论坛中浏览了一些建议,但没有一个起作用。
您的简单案例可以通过使用ANY结构和的简单查询来解决~*:
ANY
~*
SELECT * FROM tbl WHERE col ~* ANY (string_to_array('The ships hung in the sky ... bricks don鈥檛', ' '));
~*是不区分大小写的正则表达式匹配运算符。我用这个来代替ILIKE,所以我们可以在字符串中使用的原话,而无需垫%进行ILIKE。结果是相同的- 除了包含特殊字符的单词:%_\forILIKE和!$()*+.:<=>?[\]^{|}-for正则表达式模式。您可能需要以任何一种方式转义特殊字符,以免出现意外。这是一个用于正则表达式的函数:
ILIKE
%
%_\
!$()*+.:<=>?[\]^{|}-
但是我na惑不解,这将是您所需要的。看到我的评论。我怀疑您需要针对自然语言的带有匹配字典的全文搜索,以提供有用的词干…
有关的: