基于其他列创建新列

时间:2018-02-19 11:51:00

标签: sql

我设法在新表中创建以下列:

CREATE TABLE t_issue_dates as

SELECT issue_d,

cast(substr(issue_d,5,4) as numeric) as issue_year
FROM myDB

(代码将年月变量重新编码为仅年变量)

但是,我无法将此变量添加到我现有的表格" myDB"。我尝试过使用:

ALTER TABLE myDB ADD v_year - 命令,但我无法做到正确。

有没有人知道我如何将上述变量添加到"原始"表myDB?

谢谢!

2 个答案:

答案 0 :(得分:2)

首先,许多数据库支持计算或生成的列。这意味着您可以通过执行以下操作向数据库添加虚拟列:

alter table t_issue_dates add issue_year as (cast(substr(issue_d, 5, 4) as numeric));

我推荐这种方法,因为issue_year始终是最新的。

其次,您可以将此作为实际列,但该值可能已过期,需要为每个插入/更新的行重新计算:

alter table t_issue_dates add issue_year numeric;

update t_issue_dates
    set issue_year = cast(substr(issue_d, 5, 4) as numeric);

为了记录,我会使用int而不是numeric

答案 1 :(得分:1)

假设您正在使用MSSQL。在how to insert

上阅读文档或简单的谷歌是值得的

添加专栏:

Alter table t_issue_dates 
 Add V_year Int

下一步:这只会插入此特定列的数据。

Insert into t_issue_dates  (v_year)
SELECT 
cast(substr(issue_d,5,4) as numeric) 
FROM myDB