Sql 在以特殊字符分隔的电子邮件列表中查找并替换用户名

Sql 在以特殊字符分隔的电子邮件列表中查找并替换用户名,sql,regex,tsql,replace,Sql,Regex,Tsql,Replace,我有一个由不同字符分隔的电子邮件列表,如;-/等等。目标是将这些电子邮件中的用户名替换为xxx 理想情况下,我应该使用TSQL来完成,但如果SQL无法完成,我可以使用regex+Java 以下是一个输入示例: Alex.alex@cigroup.com;vito.maza@agen2.dom,vera@indus.ru;<vera@indus.it>; FRANCIS.TATA@RIZZ.COM-info@attl02.11.COM,mc.rap@wind.com/gorgo.ra1

我有一个由不同字符分隔的电子邮件列表,如;-/等等。目标是将这些电子邮件中的用户名替换为xxx


理想情况下,我应该使用TSQL来完成,但如果SQL无法完成,我可以使用regex+Java

以下是一个输入示例:

Alex.alex@cigroup.com;vito.maza@agen2.dom,vera@indus.ru;<vera@indus.it>; FRANCIS.TATA@RIZZ.COM-info@attl02.11.COM,mc.rap@wind.com/gorgo.ra13@lib.it;Lor Li Silvest [lor.Li.silvest@hotmail.it]
这里是我需要的输出:

xxxx.xxxx@cigroup.com;xxxx.xxxx@agen2.dom,xxxx@indus.ru;<xxxx@indus.it>; xxxxxxx.xxxx@RIZZ.COM-xxxx@attl02.11.COM,xx.xxx@wind.com/xxxxx.xxxx@lib.it;xxx xx xxxxxxx [xxx.xx.xxxxxxx@hotmail.it]

使用sql查询有什么方法可以做到这一点吗?如果不是,一次选择所有用户名的正则表达式是什么?

这是一种糟糕的格式。如果有机会更改输入,这是您的解决方案。如果你不得不处理这些废话,有时我们不得不从外面得到我们所得到的,你可以从以下几点开始:

DECLARE @YourString NVARCHAR(MAX)=N'Alex.alex@cigroup.com;vito.maza@agen2.dom,vera@indus.ru;<vera@indus.it>; FRANCIS.TATA@RIZZ.COM-info@attl02.11.COM,mc.rap@wind.com/gorgo.ra13@lib.it;Lor Li Silvest [lor.Li.silvest@hotmail.it]';
-混合使用字符串操作将字符串转换为XML

SELECT CAST(CONCAT('<mail><fragment>',REPLACE(REPLACE((SELECT REPLACE(REPLACE(@YourString,';','##delimit##'),',','##delimit##') AS [*] FOR XML PATH('')),'@','</fragment><fragment>'),'##delimit##','</fragment></mail><mail><fragment>'),'</fragment></mail>') AS XML)
-这就是结果

<mail>
  <fragment>Alex.alex</fragment>
  <fragment>cigroup.com</fragment>
</mail>
<mail>
  <fragment>vito.maza</fragment>
  <fragment>agen2.dom</fragment>
</mail>
<mail>
  <fragment>vera</fragment>
  <fragment>indus.ru</fragment>
</mail>
<mail>
  <fragment>&lt;vera</fragment>
  <fragment>indus.it&gt;</fragment>
</mail>
<mail>
  <fragment> FRANCIS.TATA</fragment>
  <fragment>RIZZ.COM-info</fragment>
  <fragment>attl02.11.COM</fragment>
</mail>
<mail>
  <fragment>mc.rap</fragment>
  <fragment>wind.com/gorgo.ra13</fragment>
  <fragment>lib.it</fragment>
</mail>
<mail>
  <fragment>Lor Li Silvest [lor.Li.silvest</fragment>
  <fragment>hotmail.it]</fragment>
</mail>
这取决于你或其他受虐狂,所以用户:-继续这个


祝你好运

您是否将数据存储为:;分开的项目?这会给您带来很多麻烦。理想情况下,我应该使用TSQL来做这件事,这完全是错误的。理想情况下,您永远不必在SQL中处理分隔字符串。是的,它可以是一个;分开的项目,但它可以是、分开的或-分开的。基本上,我得到了一个数据库,而电子邮件只是一个文本字段。用户在其中输入了他们想要的任意数量的电子邮件,没有任何限制。@ZoharPeled是的,这是真的。但我有一些限制,因为遗留代码打算在普通sql中执行所有字符串操作。您的sql Server版本是什么?