我的表中有一个名为TO
的列,它是一个逗号分隔的电子邮件地址列表。 (1-n)的
我不关心一行,如果它只包含 Whatever@mycompany.com 的地址,并希望将其标记为0.但是,如果一行包含NON mycompany地址(即使有是mycompany地址存在)我想将其标记为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
如果不可能的话,编写某种解析函数将地址拆分成表会更好吗?我没有数据中其他域的详尽列表。
答案 0 :(得分: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
答案 1 :(得分: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”。这只删除了一个字符。