2017-12-29 34 views
0

私が照会しているレコードは、2つの異なるフォーマットで保存されています。各人は少なくとも1つの電子メールのレコードを[email protected]の形式で持っています。電子メールが[email protected]である2番目のレコードがある人もいます。SQL WHERE REGEXP_LIKE with metacharacters

電子メールのフォーマットが[email protected]のようなレコードを検索するにはどうすればよいですか?

私は、次のSQLステートメントでそれを行おうとしましたが、私はそれは空の結果を返します。

Select * from email where regexp_like(emailaddress, '. (@)') 

最終製品は、その個別の値を選択することはないが、他のいくつかのクエリと結合して使用されますここにオプションがあります。環境はOracle DBであり、これは複数の結合を介して行われるため、より効率的です。誰かが私が間違ってやっていることや、これを達成するための他の方法を持っていますか?

はどのように likeの使用について、 ジョシュア

答えて

0

あなたはREGEXP_LIKEを使用することができます。

Select * from email where regexp_like(emailaddress, '\S*\.\S*\@\S*\.\S*') 

使用 "\ S *" すべての非空白文字に

と一致するか、普通のLIKE:どのような文字

Select * from email where emailaddress LIKE '%.%@%.%' 

わかりませんOracleの%プレースホルダに含まれているので、テストする必要があります。

REGEXPは、パターンマッチングをより厳密に制御します。

動作するかどうか教えてください。

+0

パーフェクト。ありがとう、トン –

+0

いいえボブ:)。 – ravioli

0

をいただき、ありがとうございますか!

where emailaddress like '%.%@%' 

最初の形式は、アンパサンドの前にピリオドを付けることによって区別されるようです。

+0

私はそれを忘れてしまい、うまくいきません。私はちょっと心配しています。一緒に置くと、すべての '%'のように使用すると、効率的なヒットを得られます。 –

+1

@JoshuaAverbuch - LIKEのアプローチはregexpより高速です。まだ遅いです。このようなテキスト検索に関係するものはどれも遅くなります。それがOKでない場合は、関数ベースの索引、マテリアライズド・ビュー、またはそれらの行に沿った他のソリューションを検討してください。 – mathguy