You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

创建表时能否将两日期列的天数差存入同表新列?附SQL示例

问题解答

可以实现该需求,你需要使用计算列(生成列) 语法完成操作,不同数据库的写法略有差异,以下是具体说明:

原有代码问题

你写的列定义缺少计算列的声明关键字,直接写表达式属于不合法的建表语法。

各数据库正确实现方案

从你使用的IDENTITY语法判断你大概率使用的是SQL Server,优先提供SQL Server的正确写法:

  • SQL Server 实现
    直接在列定义前加AS关键字即可,数据库会自动推导数据类型:
create table Leave
(
  LeaveID int unique IDENTITY(555, 1),
  EmpID int foreign key references Employee(ID),
  From_Date date,
  To_Date date,
  Days AS DATEDIFF(day, From_Date, To_Date)
);

如果需要把计算结果持久化存储(而非每次查询时实时计算),可以追加PERSISTED关键字:

Days AS DATEDIFF(day, From_Date, To_Date) PERSISTED
  • MySQL 实现
    需要用GENERATED ALWAYS AS声明,可选VIRTUAL(实时计算,默认值)或STORED(持久化存储):
create table Leave
(
  LeaveID int unique AUTO_INCREMENT,
  EmpID int,
  From_Date date,
  To_Date date,
  Days int GENERATED ALWAYS AS (DATEDIFF(To_Date, From_Date)) STORED,
  foreign key (EmpID) references Employee(ID)
);
  • PostgreSQL 实现
    使用GENERATED ALWAYS AS声明,持久化存储需要加STORED:
create table Leave
(
  LeaveID serial unique,
  EmpID int references Employee(ID),
  From_Date date,
  To_Date date,
  Days int GENERATED ALWAYS AS (To_Date - From_Date) STORED
);

注意事项

  • 计算列不支持手动插入、更新值,数值会随关联的From_Date、To_Date字段自动更新
  • 非持久化的计算列不占用存储空间,查询时实时计算,适合字段修改频繁的场景;持久化计算列占用存储空间,适合查询频率高、字段修改少的场景

内容的提问来源于stack exchange,提问作者codingworld

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 10:24:03