我想在我的表中添加一个新列,并用另一列中的最后3个字符填充它们,两个都是varchar,源列应保持不变。 我想避免创建临时列,而是想学习如何在单个查询中进行操作。谢谢。
答案 0 :(得分:5)
最好使用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
答案 1 :(得分:1)
我建议使用@Kushik Nayak的虚拟列解决方案。
如果使用实列来求解,则数据将不会保持同步。 (也就是说,如果有人更改了旧列或插入了新数据,则您的新列将不正确。)
真正的列不能一步完成,结构更改(DDL)和数据更改(DML)是两个步骤:
ALTER TABLE t ADD col2 VARCHAR2(3);
UPDATE t SET col2 = substr(col1,-3);