Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何基于另一列的一部分更新列_Sql_Oracle_Plsql_Oracle Sqldeveloper - Fatal编程技术网

Sql 如何基于另一列的一部分更新列

Sql 如何基于另一列的一部分更新列,sql,oracle,plsql,oracle-sqldeveloper,Sql,Oracle,Plsql,Oracle Sqldeveloper,我需要使用循环或任何其他过程,使用同一表中另一列的引用更新同一表中所有记录的一列记录 Column1 Column2 kalyan kalyan122@gmail.com arun arun414 mahesh ma223ds@gmail.com blog 4anyinfo Co

我需要使用循环或任何其他过程,使用同一表中另一列的引用更新同一表中所有记录的一列记录

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
例如:

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
实际值:

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
期望值:

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
注意:记录很少,列2中只有ID

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

提前感谢。

您只需参考集合中的列即可

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
UPDATE myTable
SET
   Column1 = (case when INSTR(Column2,'@') > 0 then SUBSTR(Column2,1,INSTR(Column2,'@')-1) else Column2 end);
它将更新所有行并将column1值设置为column2的值

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

您可以添加where子句来指定要更新的行。

您只需引用集合中的列即可

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
UPDATE myTable
SET
   Column1 = (case when INSTR(Column2,'@') > 0 then SUBSTR(Column2,1,INSTR(Column2,'@')-1) else Column2 end);
它将更新所有行并将column1值设置为column2的值

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

您可以添加where子句来指定要更新的行。

如果是oracle,则可以执行以下操作:

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
UPDATE YourTable
SET Column1 = CASE WHEN INSTR(column2, '@')
                   THEN substring(column2,0,INSTR(column2, '@')-1)
                   ELSE column2
              END

如果是oracle,您可以执行以下操作:

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
UPDATE YourTable
SET Column1 = CASE WHEN INSTR(column2, '@')
                   THEN substring(column2,0,INSTR(column2, '@')-1)
                   ELSE column2
              END
试试这个(假设它是SQL SERVER)

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
试试这个(假设它是SQL SERVER)

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

这显示了如何提取所需的数据:

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
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>
因此,首先进行备份,以防:

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
create table tbl_bkup as select * from tbl;
那么update语句将是:

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
Update tbl
set column1 = regexp_replace(column2, '^(.*)@.*$', '\1');

这显示了如何提取所需的数据:

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
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>
因此,首先进行备份,以防:

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
create table tbl_bkup as select * from tbl;
那么update语句将是:

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
Update tbl
set column1 = regexp_replace(column2, '^(.*)@.*$', '\1');

SQL-SERVER或ORACLE?基于pl/SQL和ORACLE sqldeveloper标记,我删除了SQL SERVER标记。SQL-SERVER或ORACLE?基于pl/SQL和ORACLE sqldeveloper标记,我删除了SQL SERVER标记。