【发布时间】:2021-03-23 10:02:33
【问题描述】:
是否可以将 SQL 列中的默认值设置为由其他列组成?例如,在下表中是否可以将 EndDate 默认设置为 StartDate + NoOfDays?所以插入的时候,我只需要INSERT INTO xxx VALUES StartDate NoOfDays。
【问题讨论】:
标签: mysql sql datetime database-design date-arithmetic
是否可以将 SQL 列中的默认值设置为由其他列组成?例如,在下表中是否可以将 EndDate 默认设置为 StartDate + NoOfDays?所以插入的时候,我只需要INSERT INTO xxx VALUES StartDate NoOfDays。
【问题讨论】:
标签: mysql sql datetime database-design date-arithmetic
您可以使用generated column:
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请注意,这与您在问题中提到的 default 并不完全相同。默认值适用于常规列,并且仅在 insert 时间未提供值时使用。另一方面,生成的列不能直接写入。
编辑
在 SQL Server 中:
create table mytable (
startdate datetime not null,
noofdays int not null,
enddate as dateadd(day, noofdays, startdate)
)
【讨论】:
update 更改值。