如何使用sql更新正则表达式

时间:2014-08-06 16:53:49

标签: sql sql-server regex

我遇到正则表达式更新问题。您看到我正在尝试更新:

011013092949@boxyAa9ealA949ervice49.com
211013092923@bxod.com
343232303923@dony.com

结果我希望看到这样的结果:

011013092949@boxy.com
211013092923@boxy.com
343232303923@boxy.com

我已经尝试过这样的更新程序,但它根本不起作用。

update dbo.boxy_Membership   
 set Email  like =('%[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]   
 [0-9]@boxy.com%')
 where Email like('%[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]@%')
 and Email  not like ('%@boxy.com') 

2 个答案:

答案 0 :(得分:2)

您可以使用字符串操作设置Email值:

update dbo.boxy_Membership   
set Email  = LEFT(Email,CHARINDEX('@',Email)-1)+'boxy.com'
 where Email LIKE '%[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]@%'
   and Email  not like ('%@boxy.com') 

如果@之前的位数不变,但可以根据您的WHERE标准清除,则可以进一步简化:

update dbo.boxy_Membership   
set Email  = LEFT(Email,12)+'boxy.com'
 where Email LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]@%'      
   and Email  not like ('%@boxy.com') 

答案 1 :(得分:0)

如果没有其他有效的电子邮件服务器,我会将@字符替换为@boxy.com之后的所有内容。

create table _temp (test varchar(50))

insert into _temp values('011013092949@boxyAa9ealA949ervice49.com')
insert into _temp values('211013092923@bxod.com')
insert into _temp values('343232303923@dony.com')

select replace(test, SUBSTRING(test, charindex('@', test)+1, 40), 'boxy.com') from _temp

drop table _temp