问题描述
我有一列,其中有一串长度不一的文本。我想返回字符串中从位置 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