2014-02-27 60 views
0

我有一張有3000個電子郵件地址的表格,但它們不是唯一的,我想通過修改它們來使它們唯一,例如在@符號之前添加數字。 我想用它來進行測試,在我的情況下修改數據是很好的。如何修改數據使其唯一?

我有像f_name,l_name,email_id,ph_number,地址,城市,州等字段我只是想修改email_id使其唯一。有關如何在oracle中執行操作的任何想法,非常感謝?謝謝!

+0

你會用隨機的電子郵件地址做什麼? – user2864740

回答

1

可以使用rownum psudocolumn修改的值,維卡斯Harida暗示:

update t 
set email_id = substr(email_id, 1, instr(email, '@') - 1) 
    || rownum || substr(email_id, instr(email, '@')); 

現有email_id@被分割,然後放回在中間的rownum在一起。

例如:

create table t (email_id varchar2(80)); 

table T created. 

insert into t (email_id) 
select '[email protected]' from dual 
union all select '[email protected]' from dual 
union all select '[email protected]' from dual 
union all select '[email protected]' from dual 
union all select '[email protected]' from dual; 

5 rows inserted. 

update t 
set email_id = substr(email_id, 1, instr(email_id, '@') - 1) 
    || rownum || substr(email_id, instr(email_id, '@')); 

5 rows updated. 

select * from t; 

EMAIL_ID                  
-------------------------------------------------------------------------------- 
[email protected]                
[email protected]                
[email protected]                
[email protected]                
[email protected]                

如果你想要一些更均勻的(雖然我不認爲你關心),你可以訪問dbms_random包,你可以這樣做:

update t 
set email_id = substr(email_id, 1, instr(email_id, '@') - 1) 
    || trunc(dbms_random.value(1, 9999)) 
    || substr(email_id, instr(email_id, '@')); 

...這給像:

EMAIL_ID                  
-------------------------------------------------------------------------------- 
[email protected]                
[email protected]                
[email protected]                
[email protected]                
[email protected]  

但你可能會得到collisio ns - 在同一次運行中分配兩次相同的「隨機」號碼 - 這不會發生在rownum

無論哪種方式,將字符添加到現有的值可能會使列太長,所以您需要注意這一點。

+0

它爲我工作! – user3225011

1

您可以將行號添加到電子郵件ID,以便它自動變爲唯一。

+0

我該怎麼做?你能舉個例子嗎? – user3225011