SQL 使用行式操作设置列默认值
SQL column default value set using row wise operations
是否可以在 SQL 列中设置默认值以包含其他列?例如,在下面的 table 中,是否可以将 EndDate 默认设置为 StartDate + NoOfDays?所以在插入的时候,我只需要做 INSERT INTO xxx VALUES StartDate NoOfDays.
您可以使用 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);
生成:
startdate | noofdays | enddate
:------------------ | -------: | :------------------
2020-12-12 01:28:27 | 3 | 2020-12-15 01:28:27
请注意,这与您在问题中提到的 default 并不完全相同。默认值适用于常规列,仅在 insert
时间未提供值时使用。另一方面,不能直接写入生成的列。
编辑
在SQL服务器中:
create table mytable (
startdate datetime not null,
noofdays int not null,
enddate as dateadd(day, noofdays, startdate)
)
是否可以在 SQL 列中设置默认值以包含其他列?例如,在下面的 table 中,是否可以将 EndDate 默认设置为 StartDate + NoOfDays?所以在插入的时候,我只需要做 INSERT INTO xxx VALUES StartDate NoOfDays.
您可以使用 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);
生成:
startdate | noofdays | enddate :------------------ | -------: | :------------------ 2020-12-12 01:28:27 | 3 | 2020-12-15 01:28:27
请注意,这与您在问题中提到的 default 并不完全相同。默认值适用于常规列,仅在 insert
时间未提供值时使用。另一方面,不能直接写入生成的列。
编辑
在SQL服务器中:
create table mytable (
startdate datetime not null,
noofdays int not null,
enddate as dateadd(day, noofdays, startdate)
)