删除分隔符之间的某些值-SQL server
我试图做的是从电子邮件列中删除某些数据 必须从电子邮件中删除包含删除分隔符之间的某些值-SQL server,sql,sql-server,logic,Sql,Sql Server,Logic,我试图做的是从电子邮件列中删除某些数据 必须从电子邮件中删除包含@w.com、@x.com、@y.com和@z.com的所有电子邮件 我的问题是,在电子邮件列的每一行中都有多封电子邮件,这些电子邮件地址是像这样分开的 john@daddsa.com; johnsemail@aadsss.com; johnmainemail@z.com; johnthrowemail@y.com (使用分号;作为分隔符) 有许多行包含我试图删除的电子邮件地址。电子邮件栏是vch 所有电子邮件地址的长度各不相同
@w.com
、@x.com
、@y.com
和@z.com
的所有电子邮件
我的问题是,在电子邮件列的每一行中都有多封电子邮件,这些电子邮件地址是像这样分开的
john@daddsa.com; johnsemail@aadsss.com; johnmainemail@z.com; johnthrowemail@y.com
(使用分号;
作为分隔符)
有许多行包含我试图删除的电子邮件地址。电子邮件栏是vch
所有电子邮件地址的长度各不相同
我猜这是通过运行某种循环来实现的
先谢谢你
将字符串转换为行代码>
代码>
CREATE TABLE#delemail(email VARCHAR(5000))
或电子邮件
john@daddsa.com;johnsemail@aadsss.com
如果您有这样的表格:电子邮件:
Row1=Email1;电子邮件2;电子邮件3
Row2=1;电子邮件2;电邮3;电子邮件4 要从电子邮件列中删除/更新某些电子邮件,可以使用CLR函数或使用PATINDEX语句(在WHILE语句中) 也许这些链接可以帮助您: .
.
.
INSERT INTO #delemail VALUES ( 'john@daddsa.com; johnsemail@aadsss.com; johnmainemail@z.com; johnthrowemail@y.com')
DECLARE @email VARCHAR(500)=''
SELECT @email += ';' + emailrow
FROM (SELECT Rtrim(Ltrim(Split.a.value('.', 'VARCHAR(100)'))) emailrow
FROM (SELECT Cast ('<M>' + Replace(email, ';', '</M><M>') + '</M>' AS XML) AS Data
FROM #delemail) AS A
CROSS APPLY Data.nodes ('/M') AS Split(a)) OU
WHERE emailrow NOT LIKE '%@w.com%'
AND emailrow NOT LIKE '@x.com%'
AND emailrow NOT LIKE '%@y.com%'
AND emailrow NOT LIKE '%@z.com%'
SELECT RIGHT(@email, Len(@email) - 1) As OrgEmail
CREATE FUNCTION Removefakmail (@email VARCHAR(5000))
returns VARCHAR(5000)
AS
BEGIN
DECLARE @newemails VARCHAR(5000)=''
SELECT @newemails += emailrow + '; '
FROM (SELECT Rtrim(Ltrim(Split.a.value('.', 'VARCHAR(100)'))) emailrow
FROM (SELECT Cast ('<M>' + Replace(@email, ';', '</M><M>') + '</M>' AS XML) AS Data) AS A
CROSS APPLY Data.nodes ('/M') AS Split(a)) OU
WHERE emailrow NOT LIKE '%@w.com%'
AND emailrow NOT LIKE '@x.com%'
AND emailrow NOT LIKE '%@y.com%'
AND emailrow NOT LIKE '%@z.com%'
SELECT @newemails = LEFT(@newemails, Len(@newemails) - 1)
RETURN @newemails
END
SELECT dbo.Removefakmail(email)
FROM #delemail