2016-07-22 6 views
0

サムスン電話のような値を持つカラムfieldのテーブルがあります。Postgresの文字列に単語全体が存在するかどうかを調べるには

私は文字列 "サムスン"または "電話"を検索する場合、この行を取得する方法は私の質問です。私は検索用語として「サム」または「ph」だけを与えても結果は望んでいません。

私はILIKE演算子をしようとしたが、私は使用している場合:

select * 
from mytable 
where title ILIKE 'Samsung'; 

それはタイトルが正確に等しくなるべきであると考えるように、それはすべての結果を与えるものではありません。また、を使用すると、部分文字列でも機能します。

要するに、入力された検索語句が自分の列に単語全体として存在し、検索結果のみを提供したい場合は、私は、複数の検索語値を持っている場合

また、その後、任意の単語の一致が結果

+0

"単語"とは具体的にはどういう意味ですか? – melpomene

+0

ここの文脈では、検索語はDBの入力にあるとおりに存在する必要があります。 –

答えて

3

する必要がありますあなたは、このための正規表現を使用することができます:上記の値のみphoneかを返し

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

samsungは完全な単語です。正規表現修飾子\m\Mは、パターン全体を単語にのみ一致させます。

正規表現演算子~*は、大文字と小文字を区別しません。上記の式はSamsung PhoneまたはGoogle Phoneですが、Sam's Houseは返しません。

あなたが複数の単語を追加したい場合は、単に検索この種の超高速でt1oつもりはないされていること「や」オペレータ|

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

注意を使用してそれらを追加します。正規表現は高価であり、インデックスを使用することはできません。

+0

ありがとうございます! –

関連する問題