2017-01-22 226 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