首页 > 解决方案 > 使用逐行操作设置 SQL 列默认值

问题描述

是否可以在 SQL 列中设置由其他列组成的默认值?例如,在下表中是否可以将 EndDate 默认设置为 StartDate + NoOfDays?所以插入的时候只需要INSERT INTO xxx VALUES StartDate NoOfDays。

在此处输入图像描述

标签: mysqlsqldatetimedatabase-designdate-arithmetic

解决方案


您可以使用生成的列

create table mytable (
    startdate datetime not null,
    noofdays int not null,
    enddate datetime as (startdate + interval noofdays day)
);

然后,您将插入如下:

insert into mytable (startdate, noofdays) values(now(), 3);

生成:

开始日期 | 中午 | 结束日期            
:----------------- | --------: | :-----------------
2020-12-12 01:28:27 | 3 | 2020-12-15 01:28:27

DB Fiddle 上的演示

请注意,这与您在问题中提到的default不完全相同。默认值适用于常规列,并且仅在insert时间未提供值时使用。另一方面,不能直接写入生成的列。


编辑

在 SQL Server 中:

create table mytable (
    startdate datetime not null,
    noofdays int not null,
    enddate as dateadd(day, noofdays, startdate)
)

演示


推荐阅读