【问题标题】:How to update a column based on a part of another column如何根据另一列的一部分更新列
【发布时间】:2016-06-22 12:16:52
【问题描述】:

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

例子:

实际:

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。

提前致谢。

【问题讨论】:

  • SQL-SERVER 还是 ORACLE?
  • 基于 pl/Sql 和 oracle-sqldeveloper 标签,我删除了 Sql-Server 标签。

标签: sql oracle plsql oracle-sqldeveloper


【解决方案1】:

如果是它的预言机,你可以这样做:

UPDATE YourTable
SET Column1 = CASE WHEN INSTR(column2, '@')
                   THEN substring(column2,0,INSTR(column2, '@')-1)
                   ELSE column2
              END

【讨论】:

    【解决方案2】:

    您可以只引用 SET 上的列。

    UPDATE myTable
    SET
       Column1 = (case when INSTR(Column2,'@') > 0 then SUBSTR(Column2,1,INSTR(Column2,'@')-1) else Column2 end);
    

    它将更新所有行并将column1的值设置为column2的值。

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        这显示了如何提取你想要的数据:

        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');
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-08-20
          • 1970-01-01
          • 1970-01-01
          • 2018-10-18
          • 2021-03-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多