Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MS-SQL电子邮件地址列表,如statement/regex_Sql_Sql Server_Regex_Parsing_Sql Like - Fatal编程技术网

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”。这只会删除一个字符。

为什么没有一个表可以将电子邮件地址映射到当前表?为什么没有一个表可以将电子邮件地址映射到当前表?天哪,这是个好主意!我应该想到这一点。看这些桌子太久了:)天哪,这是个好主意!我应该想到这一点。查看这些表格的时间过长:)