2015-08-21 34 views
3

我有一個電子郵件列表。我想更改所有這些文件來測試我的測試系統的電子郵件,例如[email protected][email protected]。 我不想使用實際的電子郵件,因爲它會產生問題。是否可以在單個查詢或存儲過程中一次更改所有電子郵件。在@之後替換所有的電子郵件地址

+3

側面說明:從不發送郵件到'@ test.com':這是一個真正的域名和郵件會被他們的郵件服務器接收。 –

+4

附註2:'example.com' *是一個專門用於這些目的的域。 – Piskvor

回答

5

我試過這個,它工作完美。

UPDATE myTable SET UserEMail = 
(SELECT SUBSTRING(UserEMail, 0, PATINDEX('%@%',UserEMail)) + '@test.com' 
from myTable U WHERE U.UserID = myTable.UserID) 
1

使用STUFFLEFT字符串函數。試試這個

DECLARE @emails VARCHAR(200) = '[email protected]' 

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

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

在表結構添加一列,其定義爲:CONCAT(SUBSTRING([old_column],0,CHARINDEX('@',[old_column])),'@test.com') AS [new_column]

參考M.Ali的答案在這裏基於舊列添加一個新列: Alter a Table by adding a new column whose value depends on another column

使用+ and ISNULL而不是CONCAT如果您使用的是舊版本的sql-server版本SQL Server 2012

+0

爲什麼要添加一個新列?如果現有的可能的話。 – Abdul

+0

@Abdul是的,你也可以做到這一點。我認爲你還需要早期的電子郵件,這可能是保留早期電子郵件的好主意。此外,在這種情況下,出於性能原因,使用CHARINDEX而不是PATINDEX。 –

1

嘗試下面的代碼片段 -

create table #email (emailid varchar(20)); 
    insert into #email 
    select '[email protected]' union 
    select '[email protected]' union 
    select '[email protected]' 
    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;  
+0

我的電子郵件ID是deepanshu'.'[email protected]'.'com。另外,爲什麼我們使用PATINNDEX來查找角色? –

+0

@DeepanshuKalra - 感謝您對這次遺漏的確認,現在改變了邏輯。 – Abhishek

3

試試這個

UPDATE users SET email=REPLACE(email, SUBSTRING(email,INSTR(email,'@')+1), 
'example.com') 
相關問題