1

TOテーブルに、電子メールアドレスのコンマ区切りリストであるという列があります。(1-n)

Whatever@mycompany.comへのアドレスのみが含まれている行に関係がなく、0としてフラグを立てたい場合。ただし、行に非mycompanyアドレスが含まれている場合(mycompanyアドレスが存在する場合でも)、次のようにします。 1としてフラグを立てます。これは1つのLIKEステートメントを使用して可能ですか?

私はもう試した;

AND
    [To]  like '%@%[^m][^y][^c][^o][^m][^p][^a][^n][^y]%.%'

理想的な出力は次のとおりです。

alice@mycompany.com, bob@mycompany.com, malory@yourcompany.com     1
alice@mycompany.com, bob@mycompany.com                             0
malory@yourcompany.com                                             1

これが不可能な場合は、アドレスをテーブルに分割するための何らかの解析関数を作成する方がよいでしょうか。データに他のドメインの完全なリストはありません。

4

2 に答える 2

3

醜いですが、うまくいきます。Case ステートメントは、@ 記号の出現回数と @mycompany.com の出現回数を比較します (XXX.. は文字列の長さを保持するためのものです)。

select 
    * 
    , flag = case when len(field) - len(replace(replace(field,'@mycompany.com','XXXXXXXXXXXXXX'),'@','')) > 0 then 1 else 0 end 
from (
    select 'alice@mycompany.com, bob@mycompany.com, malory@yourcompany.com' as field union all 
    select 'alice@mycompany.com, bob@mycompany.com' union all 
    select 'malory@yourcompany.com' 
) x
于 2013-03-20T13:25:38.063 に答える
2

簡単なカウント方法を提案します。「@mycompany」が出現する回数とカンマの数を数えます。これらが異なる場合は、問題があります。

 select emails,
        (case when len(emails) - len(replace(emails, ',', '')) = 
                   len(emails) - len(replace(emails, '@mycompany.com', 'mycompany.com'))
              then 0
              else 1
         end) as HasNonCompanyEmail
 from t

計算を簡単にするために、"@mycompany.com" を "mycompany.com" に置き換えます。これにより、正確に 1 文字が削除されます。

于 2013-03-20T13:27:29.953 に答える