将计算列插入现有表中

问题描述

我有一列,其中有一串长度不一的文本。我想返回字符串中从位置 1 开始的前 4 个字符,并且仅当存在直接匹配时才将它们输出到表中。因此,如果我只想返回 PDFG 而不想返回 ADHR 或任何其他组合,那么下面的代码对我来说很好用。

use DB
select 
substring(description,1,4) as newcol from table1 where substring(description,4) like '%ABCD%'

但是我想将此计算列保留到现有表中,所以像这样;

use DB
alter table table1
add newcol as ("and then the rest of the code above")

我不知道如何重新排序我的代码以适应新的查询任何帮助表示赞赏。

以下是一些示例数据:

  • PDFG_2013 AHSDHDF
  • ADHR_2310 ADGDGEE
  • DATW_5142 NFBSAEE

输出应存储在名为 table1 的现有表中的 newcol 中。样本数据中新列的唯一值应该是 PDFG

解决方法

如果匹配,则使用 case 表达式返回前 4 个字符,否则返回 null。

Alter table table1
add newcol as case when description like 'ABCD%' then substring(description,1,4) end

或者,更简单

Alter table table1
add newcol as case when description like 'ABCD%' then 'ABCD' end