Sql 如何修改数据以使其唯一?

Sql 如何修改数据以使其唯一?,sql,plsql,oracle11g,oracle10g,Sql,Plsql,Oracle11g,Oracle10g,我有一个表,有3000个电子邮件地址,但它们不是唯一的,我想通过某种方式修改它们,比如在@symbol之前添加数字,使它们成为唯一的。 我想把它用于测试,在我的例子中修改数据是可以的 我有f_名称、l_名称、电子邮件id、PHU号码、地址、城市、州等字段。我只想修改电子邮件id使其唯一。非常感谢您对如何在oracle中实现这一点有何想法?谢谢 您可以将行号添加到电子邮件Id,使其自动成为唯一的。您可以使用rownumpsudocolumn修改值,正如Vikas Harida所暗示的: updat

我有一个表,有3000个电子邮件地址,但它们不是唯一的,我想通过某种方式修改它们,比如在@symbol之前添加数字,使它们成为唯一的。 我想把它用于测试,在我的例子中修改数据是可以的


我有f_名称、l_名称、电子邮件id、PHU号码、地址、城市、州等字段。我只想修改电子邮件id使其唯一。非常感谢您对如何在oracle中实现这一点有何想法?谢谢

您可以将行号添加到电子邮件Id,使其自动成为唯一的。

您可以使用
rownum
psudocolumn修改值,正如Vikas Harida所暗示的:

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

现有的<代码> EMAILIDID<代码>在<代码> @ /代码>中被拆分,然后与 RoNuM</代码>一起在中间。

例如:

create table t (email_id varchar2(80));

table T created.

insert into t (email_id)
select 'someone@gmail.com' from dual
union all select 'someone@gmail.com' from dual
union all select 'someone@gmail.com' from dual
union all select 'someone@yahoo.com' from dual
union all select 'someone@yahoo.com' 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                                                                       
--------------------------------------------------------------------------------
someone1@gmail.com                                                               
someone2@gmail.com                                                               
someone3@gmail.com                                                               
someone4@yahoo.com                                                               
someone5@yahoo.com                                                               
如果您想要更统一一点的东西(尽管我认为您不在乎),并且您可以访问
dbms\u 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                                                                       
--------------------------------------------------------------------------------
someone6584@gmail.com                                                            
someone988@gmail.com                                                             
someone9837@gmail.com                                                            
someone4026@yahoo.com                                                            
someone6365@yahoo.com     
但是您可能会遇到冲突-在同一次运行中分配两次相同的“随机”数-这在
rownum
中是不可能发生的


无论哪种方式,向现有值中添加字符都可能使该列过长,因此您需要注意这一点。

对于随机电子邮件地址,您会怎么做?我该怎么做?你能举个例子吗?