私は、テキスト列、例えば車両番号を含むテーブルを持っています。特殊文字を無視したテキスト列に対するPostgreSQLのクエリ
ここで、特定の車両番号を含むフィールドのテーブルを照会したいとします。
マッチングしている間は、英数字以外の文字は考慮したくありません。
example: query condition - DEL123
should match - DEL-123, DEL/123, [email protected], etc...
私は、テキスト列、例えば車両番号を含むテーブルを持っています。特殊文字を無視したテキスト列に対するPostgreSQLのクエリ
ここで、特定の車両番号を含むフィールドのテーブルを照会したいとします。
マッチングしている間は、英数字以外の文字は考慮したくありません。
example: query condition - DEL123
should match - DEL-123, DEL/123, [email protected], etc...
あなたはスキップするためにどの文字がわかっている場合、(正規表現の機能よりも高速である)このtranslate()
コールの2番目のパラメータとしてそれらを置く:エルス
select *
from a_table
where translate(code, '-/@', '') = 'DEL123';
は、あなたが使用して英数字のみを比較することができますregexp_replace()
:
select *
from a_table
where regexp_replace(code, '[^[:alnum:]]', '', 'g') = 'DEL123';
クリンの答えは素晴らしいですが、あなたは数百万レコードを検索している場合はので、検索引数可能ではありません@(メートルあなたのケースではありませんが、おそらく答えを探している類似の質問を持つ他の人)、正規表現を使用すると、より良い結果が得られる可能性が高くなります。
以下が大幅にテストされた行の数を減らし、コードのインデックスを使用します。
select *
from a_table
where code ~ '^DEL[^[:alnum:]]*123$';
あなたは「特殊文字」で、正確に何を意味する –
正規表現を使うのか? – melpomene
@melpomene(特殊文字による)私は英数字ではない文字を意味しました。 –