代码之家  ›  专栏  ›  技术社区  ›  undefinedBehavior

添加一个新列并用OracleSQL中另一列的一部分填充它

  •  4
  • undefinedBehavior  · 技术社区  · 7 年前

    我想在我的表中添加一个新列,并用另一列的最后3个字符填充它,这两个字符都是varchar,源列应该保持不变。 我希望避免创建临时列,相反,我希望学习如何在单个查询中创建临时列。谢谢您。

    2 回复  |  直到 7 年前
        1
  •  5
  •   Kaushik Nayak    7 年前

    最好用 virtual columns

    create table t2( col_name varchar2(10) );
    
    insert into t2(col_name) values('hsaJDadkD');
    
    ALTER TABLE t2 ADD (col_name2 GENERATED ALWAYS AS (SUBSTR(col_name,-3))); --virtual column
    
    Select * from T2;
    
    COL_NAME   COL_NAME
    ---------- --------
    hsaJDadkD  dkD     
    
        2
  •  1
  •   wolφi    7 年前

    我建议使用@kushik nayak的虚拟列解决方案。

    如果用实列解决,数据将不会保持同步。(也就是说,如果有人更改了旧列或插入了新数据,则新列将不正确)。

    实列不能一步完成,结构变更(DDL)和数据变更(DML)是两步:

    ALTER TABLE t ADD col2 VARCHAR2(3);
    UPDATE t SET col2 = substr(col1,-3);