Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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
Sql server 在Sql中替换@之后的所有电子邮件地址_Sql Server_Tsql - Fatal编程技术网

Sql server 在Sql中替换@之后的所有电子邮件地址

Sql server 在Sql中替换@之后的所有电子邮件地址,sql-server,tsql,Sql Server,Tsql,我有一份电子邮件清单。我想把它们全部改为测试我的测试系统的电子邮件,例如。John@gmail.com到john@test.com. 我不想使用实际的电子邮件,因为它会产生问题。是否可以在单个查询或存储过程中一次更改所有电子邮件 使用填充或左字符串函数。试试这个 DECLARE @emails VARCHAR(200) = 'John@gmail.com' SELECT Stuff(@emails, Charindex('@', @emails), Len(@emails), '') + '@

我有一份电子邮件清单。我想把它们全部改为测试我的测试系统的电子邮件,例如。John@gmail.com到john@test.com.
我不想使用实际的电子邮件,因为它会产生问题。是否可以在单个查询或存储过程中一次更改所有电子邮件

使用
填充
字符串函数。试试这个

DECLARE @emails VARCHAR(200) = 'John@gmail.com'

SELECT Stuff(@emails, Charindex('@', @emails), Len(@emails), '') + '@test.com'

SELECT LEFT(@emails, Charindex('@', @emails)-1) + '@test.com' 

在表结构中添加一列并将其定义为:
CONCAT(子字符串([old_column],0,CHARINDEX('@',[old_column]),'@test.com')作为[new_column]

请参考M.Ali的回答,在旧列的基础上添加新列:


如果您使用的sql server版本早于sql server 2012,请使用
+和ISNULL
而不是
CONCAT
,请尝试以下代码片段-

create table #email (emailid varchar(20));
    insert into #email
    select 'john@gmail.com' union
    select 'john@yahoo.co.in' union
    select 'deepanshu.kalra@outlook.com'
    select * from #email;
    select replace(emailid,left(substring(emailid,charindex('@',emailid)+1,len(emailid)),charindex('.',substring(emailid,charindex('@',emailid)+1,len(emailid)))-1),'test' from #email;    

我试过这个,效果很好

 UPDATE myTable  SET UserEMail = 
 (SELECT SUBSTRING(UserEMail, 0, PATINDEX('%@%',UserEMail)) + '@example.org' 
 from myTable U WHERE U.UserID = myTable.UserID)
试试这个

UPDATE users SET email=REPLACE(email, SUBSTRING(email,INSTR(email,'@')+1),
'example.com')
这个对我很有用:


更新[表格][电子邮件]=REPLACE([电子邮件],'@company.com','@test.com')

旁注:永远不要将邮件发送到
@test.com
:这是一个真实的域,邮件将由其邮件服务器接收。旁注2:
example.com
是一个专门用于这些目的的域。为什么要添加新列?如果在现有的版本中可能的话。@Abdul是的,您也可以这样做。我想你也会需要更早的电子邮件,这可能是一个好主意,保持较早的电子邮件。此外,在本例中,出于性能原因,请使用CHARINDEX而不是PATINDEX。我的电子邮件id是deepanshu
kalra@outlook
com。还有,为什么我们要使用PATINNDEX查找字符?@deepanshukalla-感谢您识别了未命中的字符,现在更改了逻辑。我认为它需要一个扩展:
查询中的错误(7):错误:函数instr(字符变化,未知)不存在
。。哎呀!问题是关于。我喜欢这个!谢谢!工作起来很有魅力!小心使用PATINDEX,因为如果没有匹配项,它将返回0。
UPDATE employees SET email=REPLACE(email, SUBSTR(email,INSTR(email,'@')+1),'test.com');