2016-07-22 37 views
0

我有一個列表,其中包含像Samsung Phone這樣的值的列field如何搜索Postgres中的字符串中是否存在整個單詞

我的問題是,如果我搜索字符串「三星」或「電話」,我怎麼能得到這一行。如果我只給出「Sam」或「ph」作爲搜索詞,我不想要任何結果。

我曾與ILIKE操作嘗試,但如果我使用:

select * 
from mytable 
where title ILIKE 'Samsung'; 

其認爲標題應該是恰好等於它不給任何結果。此外,如果我使用title ILIKE '%Samsung%'那麼它將適用於任何部分字符串。

總之,我想如果輸入搜索詞作爲整個單詞在我的專欄中存在,那麼只給出搜索結果。

另外,如果我有多個搜索項的值,那麼任何字匹配應該是結果

+0

你是什麼意思的「單詞」? – melpomene

+0

單詞在這裏是在上下文中搜索詞應該存在,因爲它是在輸入中給出,在DB –

回答

3

您可以使用此正則表達式:

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

謝謝,這個工程! –

相關問題