Sql 如何修改数据以使其唯一?
我有一个表,有3000个电子邮件地址,但它们不是唯一的,我想通过某种方式修改它们,比如在@symbol之前添加数字,使它们成为唯一的。 我想把它用于测试,在我的例子中修改数据是可以的Sql 如何修改数据以使其唯一?,sql,plsql,oracle11g,oracle10g,Sql,Plsql,Oracle11g,Oracle10g,我有一个表,有3000个电子邮件地址,但它们不是唯一的,我想通过某种方式修改它们,比如在@symbol之前添加数字,使它们成为唯一的。 我想把它用于测试,在我的例子中修改数据是可以的 我有f_名称、l_名称、电子邮件id、PHU号码、地址、城市、州等字段。我只想修改电子邮件id使其唯一。非常感谢您对如何在oracle中实现这一点有何想法?谢谢 您可以将行号添加到电子邮件Id,使其自动成为唯一的。您可以使用rownumpsudocolumn修改值,正如Vikas Harida所暗示的: updat
我有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<代码>在<代码> @ /代码>中被拆分,然后与
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
中是不可能发生的
无论哪种方式,向现有值中添加字符都可能使该列过长,因此您需要注意这一点。对于随机电子邮件地址,您会怎么做?我该怎么做?你能举个例子吗?