2017-07-05 4 views
0
--where '[email protected]' in(o.SuOrderEmailAddress, o.SuBusEmailAddress, o.SuReturnEmail, O.SuPartsEmail) and es.ictid = 7 

複数の列で変数(電子メールアドレス)を検索したいとします。これは私が今持っているものであり、それは機能します。同様の、1つの変数、複数の列を使用するSQL

ワイルドカードを使用したいので、Likeを使用する必要があると思います。たとえば、*@aol.comを使用できることは非常に役に立ちます。今私は正確な電子メールアドレスを入力する必要があります。

--Where s.suname like 'rizt%'and es.ictid = 7 

これは、この上の例では十分に簡単だったが、私はイムは、私はワイルドカードを使用できるように、私は好きで使用できる場所へと失われた複数の列を行うための構文を並べ替えたら。

ありがとうございました

+1

あなたはどのデータベースを使用していますか? –

+0

これは私が新しいので馬鹿に思えるかもしれませんが、どのように伝えることができますか? – Tyler

答えて

0

あなたはメールアドレスの最後を見ることができます。ほとんどのデータベースはright()機能をサポートしています。

where '@aol.com' in (right(o.SuOrderEmailAddress, 8), 
        right(o.SuBusEmailAddress, 8), 
        right(o.SuReturnEmail, 8), 
        right(o.SuPartsEmail, 8) 
        ) and 
     es.ictid = 7 

right()は、一般的には、同等の機能を持っていなくても、データベースを。)いくつかのデータベースが別のオプションである、正規表現をサポート

。または、あなたの場合、文字列の連結も機能します。

EDIT:

変数を持っている場合は、あなたが行うことができます:

where @var in (right(o.SuOrderEmailAddress, len(@var)), 
       right(o.SuBusEmailAddress, len(@var)), 
       right(o.SuReturnEmail, len(@var)), 
       right(o.SuPartsEmail, len(@var)) 
      ) and 
     es.ictid = 7 
+0

これは多くの場合に問題なく動作しますが、aolのような一般的な電子メールが使用される場合、Imはあまりにも多くの結果を得ます。 基本的には、さまざまな電子メールの連絡先と仕事をする特定の従業員を特定する必要があるため、特定の企業名を使用しなかった場合には問題があります。 – Tyler

+0

実際には、これはもっと可能です。私は8が何文字を見ていると仮定していますか?特定の番号を付けることなくそれを変更する方法はありますか?私は文字の制限を完全に取り除くことができますか、そこに何らかの変数を入れる方法がありますか? *または%または何か? – Tyler

0

私は本当の答えはあなたがMS SQLを使用している場合(フルテキストインデックスを使用することであると思います - それ以外の場合見てあなたが使用しているサーバーに相当するものがあります)。しかし、ここでは動作するはず醜いハックです:

WHERE ISNULL(o.SuOrderEmailAddress, '') + '|' 
     + ISNULL(o.SuBusEmailAddress, '') + '|' 
     + ISNULL(o.SuReturnEmail, '') + '|' 
     + ISNULL(O.SuPartsEmail, '') LIKE @pattern 

これは単に@patternのためにその連結した文字列をチェックする前に、パイプで区切られたリストに、関連するすべてのフィールドを連結します。

+0

イムこれはかなり新しい、だから何を '|'示す?。私はこれを使用しようとしたが、エラーなしで実行されますが、結果が出ません。 – Tyler

+0

それぞれにnullをチェックする必要があります。 – JBrooks

+0

@JBrooksはい、良い点、私は編集します。 –

0

これは一般的な考えです。通常、@searchはストアドプロシージャのパラメータになります。最初にWHERE句を見てください。

declare @search varchar(50) = '@aol.com' 

    set @search = '%' + @search + '%' 

    select case when o.SuOrderEmailAddress like @search then o.SuOrderEmailAddress 
       when o.SuBusEmailAddress like @search then o.SuBusEmailAddress 
       when o.SuReturnEmail like @search then o.SuReturnEmail 
       when o.SuPartsEmail like @search end as matchedEmail  
    from MyTable as o 
    where (o.SuOrderEmailAddress like @search 
      or o.SuBusEmailAddress like @search 
      or o.SuReturnEmail like @search 
      or o.SuPartsEmail like @search) and ... 

フロントエンドで '%'の追加を制御できます。これは私にとって読者にはっきりと書かれているようで、マッチした電子メールアドレスを返すことができます。

関連する問題