如何搜索Postgres中的字符串中是否存在整个单词

问题描述:

我有一个列表,其中包含像Samsung Phone这样的值的列field如何搜索Postgres中的字符串中是否存在整个单词

我的问题是,如果我搜索字符串“三星”或“电话”,我怎么能得到这一行。如果我只给出“Sam”或“ph”作为搜索词,我不想要任何结果。

我曾与ILIKE操作尝试,但如果我使用:

select * 
from mytable 
where title ILIKE 'Samsung'; 

其认为标题应该是恰好等于它不给任何结果。此外,如果我使用title ILIKE '%Samsung%'那么它将适用于任何部分字符串。

总之,我想如果输入搜索词作为整个单词在我的专栏中存在,那么只给出搜索结果。

另外,如果我有多个搜索项的值,那么任何字匹配应该是结果

+0

你是什么意思的“单词”? – melpomene

+0

单词在这里是在上下文中搜索词应该存在,因为它是在输入中给出,在DB –

您可以使用此正则表达式:

where title ~* '(\mphone\M)|(\msamsung\M)' 

以上仅返回值,其中phonesamsung是完整的单词。正则表达式修饰符\m\M使模式只匹配整个单词。

正则表达式运算符~*使这种情况下不区分大小写。上述表达式将返回Samsung PhoneGoogle Phone,但不返回Sam's House

如果你想添加更多的话,只是用“或”运算符|

where title ~* '(\mphone\M)|(\msamsung\M)|(\mbhat\M)' 

注意,这种搜索是不会T1O是超快速的添加。正则表达式很昂贵,它们不能使用任何索引。

+0

谢谢,这个工程! –