我需要使用循环或任何其他进程更新同一个表中所有记录的同一个表中另一列的引用更新一个列记录。
示例:
实际:
Column1 Column2
kalyan kalyan122@gmail.com
arun arun414
mahesh ma223ds@gmail.com
blog 4anyinfo
预期:
Column1 Column2
kalyan122 kalyan122@gmail.com
arun414 arun414
ma223ds ma223ds@gmail.com
4anyinfo 4anyinfo
注意:很少有记录,只有ID存在于第2列。
提前致谢。
答案 0 :(得分:2)
如果是oracle,你可以这样做:
UPDATE YourTable
SET Column1 = CASE WHEN INSTR(column2, '@')
THEN substring(column2,0,INSTR(column2, '@')-1)
ELSE column2
END
答案 1 :(得分:1)
您只需引用SET上的列。
UPDATE myTable
SET
Column1 = (case when INSTR(Column2,'@') > 0 then SUBSTR(Column2,1,INSTR(Column2,'@')-1) else Column2 end);
它将更新所有行并将column1值设置为column2的值。
您可以添加where子句以指定要更新的行。
答案 2 :(得分:1)
试试这个(假设它是SQL SERVER)
UPDATE TABLE_A SET Column1= SUBSTRING(Column2,1,CASE CHARINDEX('@',Column2,1)-1
WHEN -1 THEN LEN(Column2) ELSE CHARINDEX('@',Column2,1)-1 END )
答案 3 :(得分:1)
这显示了如何提取所需的数据:
SQL> with tbl(col1, col2) as (
select 'kalyan','kalyan122@gmail.com' from dual union
select 'arun', 'arun414' from dual union
select 'mahesh','ma223ds@gmail.com' from dual union
select 'blog', '4anyinfo' from dual
)
select regexp_replace(col2, '^(.*)@.*$', '\1') col1_data
from tbl;
COL1_DATA
---------------------------------------------------------------
arun414
4anyinfo
kalyan122
ma223ds
SQL>
首先进行备份以防万一:
create table tbl_bkup as select * from tbl;
然后更新语句将是:
Update tbl
set column1 = regexp_replace(column2, '^(.*)@.*$', '\1');