【问题标题】:SQL column default value set using row wise operations使用逐行操作设置 SQL 列默认值
【发布时间】:2021-03-23 10:02:33
【问题描述】:

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

【问题讨论】:

    标签: mysql sql datetime database-design date-arithmetic


    【解决方案1】:

    您可以使用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

    Demo on DB Fiddle

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


    编辑

    在 SQL Server 中:

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

    Demo

    【讨论】:

    • @Denzyl 。 . .请注意,这并不完全是您的问题的解释方式。这定义了一个始终具有计算值的“虚拟”列。它不是 默认 值,而只是列的值。这似乎是您想要的,但这不是问题所要求的。 “默认”意味着您可以在以后使用update 更改值。
    猜你喜欢
    • 2020-09-01
    • 2023-01-29
    • 1970-01-01
    • 2017-03-29
    • 1970-01-01
    • 2013-10-07
    • 2013-06-01
    • 2017-07-06
    • 1970-01-01
    相关资源
    最近更新 更多