2017-01-22 189 views
0

我想创建'会议'表并将EndDate设置为StartDate + ConferenceDays。有没有办法如何做到这一点?SQL Server - 计算日期列

create table Conferences(
    ConferenceID int not null primary key, 
    ConferenceName varchar(50) not null, 
    ConferenceDays int not null, 
    StartDate date not null, 
    EndDate date not null, 
) 
+0

你想要一个新的列,它是所有三个的总和吗? –

+0

你正在使用哪些DBMS? Postgres的?甲骨文? DB2?火鸟? –

+0

@YashveerSingh如果StartDate为2016-01-01,ConferenceDays为4,我希望EndDate为2016-01-05。 –

回答

3

对于SQL Server:

create table Conferences(
    ConferenceID int not null primary key, 
    ConferenceName varchar(50) not null, 
    ConferenceDays int not null, 
    StartDate date not null, 
    EndDate AS (dateadd(day,ConferenceDays, StartDate)) PERSISTED 
) 
+0

非常感谢!它完美的作品。我试着与'dateadd'类似,但用'Deafult'或'Check',这里应该是'AS'。 :)谢谢,再多一次:) –

+0

@EuroPe:我很高兴它的工作原理:快乐编码 –

+0

您应该解释什么'持续的'意味着在您的答案 –

0

我建议重新考虑这一点。如果EndDate总是StartDate + ConferenceDays,那么你基本上有冗余数据,这可能被认为是违反规范化规则。

如果您使用的是ORM,或者您已经定义了一些类,它表示该数据表的话,我建议增加这样的特性:

partial class Conference { 

    DateTime EndDate { get { return this.StartDate.AddDays(this.ConferenceDays); } } 
    ... etc. 
} 

将这项工作的吗?

+0

EndDate作为一个单独的数据库列是有用的,当需要排序通过EndDate或在WHERE子句中使用它。 – andrews