【问题标题】:Inserting calculated column into existing table将计算列插入现有表
【发布时间】:2021-08-08 11:03:03
【问题描述】:

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

use DB
select 
substring(description, 1, 4) as newcol from table1 where substring(description, 1, 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

【问题讨论】:

  • 你的意思是XYZABCDEQWE应该给你XYZA吗?
  • @jarlh 我的意思是文本并不重要,所有字符串的长度都不同并且都不同,所以一些更具体的例子可能是:PDFG_2013 HJDSSDB DSTV_2615 GDFSTSS 所以我只想返回 PDFG 而不是如果不匹配,则任何其他字符串,但我需要将此计算列存储在现有表中
  • 但是 ABCD 在字符串中的哪个位置重要吗?
  • 向我们展示一些示例数据 - 以及预期的 newcol 值。
  • @jarlh 我已经编辑了问题以包含一个示例

标签: sql sql-server substring where-clause alter-table


【解决方案1】:

如果匹配,则使用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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    相关资源
    最近更新 更多