MS-SQL电子邮件地址列表,如statement/regex
我的表中有一列名为MS-SQL电子邮件地址列表,如statement/regex,sql,sql-server,regex,parsing,sql-like,Sql,Sql Server,Regex,Parsing,Sql Like,我的表中有一列名为TO,这是一个以逗号分隔的电子邮件地址列表。(1-n) 如果一行只包含到的地址,我不关心它Whatever@mycompany.com并将其标记为0。但是,如果一行包含非mycompany地址(即使存在mycompany地址),我想将其标记为1。这是否可能使用一个LIKE语句 我试过了 AND [To] like '%@%[^m][^y][^c][^o][^m][^p][^a][^n][^y]%.%' 理想的输出将是: alice@mycompany.com, bo
TO
,这是一个以逗号分隔的电子邮件地址列表。(1-n)
如果一行只包含到的地址,我不关心它Whatever@mycompany.com并将其标记为0。但是,如果一行包含非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
如果不可能,编写某种解析函数将地址拆分到表中会更好吗?我没有数据中其他域的详尽列表。这很难看,但它可以工作。Case语句将@symbol的出现次数与@mycompany.com的出现次数进行比较(XXX..仅用于保持字符串的长度):
虽然很难看,但它很管用。Case语句将@symbol的出现次数与@mycompany.com的出现次数进行比较(XXX..仅用于保持字符串的长度):
我建议采用一种简单的计数方法。计算“@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”。这只会删除一个字符。我建议使用一种简单的计数方法。计算“@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”。这只会删除一个字符。为什么没有一个表可以将电子邮件地址映射到当前表?为什么没有一个表可以将电子邮件地址映射到当前表?天哪,这是个好主意!我应该想到这一点。看这些桌子太久了:)天哪,这是个好主意!我应该想到这一点。查看这些表格的时间过长:)