2016-06-14 15 views
2

私は、テキスト列、例えば車両番号を含むテーブルを持っています。特殊文字を無視したテキスト列に対するPostgreSQLのクエリ

ここで、特定の車両番号を含むフィールドのテーブルを照会したいとします。

マッチングしている間は、英数字以外の文字は考慮したくありません。

example: query condition - DEL123 
     should match - DEL-123, DEL/123, [email protected], etc... 
+0

あなたは「特殊文字」で、正確に何を意味する –

+0

正規表現を使うのか? – melpomene

+0

@melpomene(特殊文字による)私は英数字ではない文字を意味しました。 –

答えて

3

あなたはスキップするためにどの文字がわかっている場合、(正規表現の機能よりも高速である)このtranslate()コールの2番目のパラメータとしてそれらを置く:エルス

select * 
from a_table 
where translate(code, '-/@', '') = 'DEL123'; 

は、あなたが使用して英数字のみを比較することができますregexp_replace()

select * 
from a_table 
where regexp_replace(code, '[^[:alnum:]]', '', 'g') = 'DEL123'; 
+0

@kilnありがとう。それは役に立ちました。 –

+0

@SantoshGuptaこれを答え以外の心ですか?しかし、私はこれがあなたが本当に望むより多くの価値を受け入れるかもしれないと思います。 – maxik

+0

@maxik - たとえば? – klin

0

クリンの答えは素晴らしいですが、あなたは数百万レコードを検索している場合はので、検索引数可能ではありません@(メートルあなたのケースではありませんが、おそらく答えを探している類似の質問を持つ他の人)、正規表現を使用すると、より良い結果が得られる可能性が高くなります。

以下が大幅にテストされた行の数を減らし、コードのインデックスを使用します。

select * 
from a_table 
where code ~ '^DEL[^[:alnum:]]*123$'; 
関連する問題