0

让我们从项目的目的开始:

-> 我有一个表,其中有一列Date_Election_President类型是Datetime......

从选举的一天开始,总统不能达到两年以上

在同一张表中,我有一个President_Eligible类型的另一列,varchar(3)它只接受“是”或“否”

  • 是 - 如果总统还没有完成两年
  • 否 - 如果总统确实完成了两年

我问你如果President_Eligible总统完成了两年,SQL Server 中是否有任何方法可以自动将列从“是”更改为“否”?

这是桌子

create table GIAC
(
    Id_GIAC smallint primary key identity(1,1),
    Nom varchar(50) not null,
    Adress varchar(50) not null,

    President varchar(50) not null,
    President_Eligible varchar(20),
    Date_Election_President datetime,
)
4

2 回答 2

2

以答案形式添加我的评论,并提供更多信息:

当您检索总统是否符合条件时,您无需将资格数据存储在数据库中,而是根据数据库中的日期进行计算。这样您就不必更新任何内容,只需在查询数据时确定资格。

一个示例查询:

SELECT 
    CASE WHEN DATEDIFF(year, Date_Election_President , GetDate() ) >= 2 
        THEN 'Yes' 
        ELSE 'No' 
    END

以及使用 DATEDIFF 的信息:http: //msdn.microsoft.com/en-us/library/ms189794.aspx

于 2012-04-26T22:02:32.817 回答
2

当然,如果您确实希望它“在”您的表中,您可以使用计算列:

create table GIAC
(
    Id_GIAC smallint primary key identity(1,1),
    Nom varchar(50) not null,
    Adress varchar(50) not null,

    President varchar(50) not null,
    Date_Election_President datetime,
    President_Eligible as CASE WHEN DATEDIFF(day,Date_Election_President,CURRENT_TIMESTAMP) >= 730 THEN 'NO' ELSE 'YES' END
)

然后你不必记住在每个查询中都包含这个逻辑——如果规则会改变,把它放在每个查询中是有风险的。

我也改为计算自选举以来的天数,而不是这样做DATEDIFF(year,...,因为DATEDIFF计算两个日期之间已识别日期部分的转换次数。例如,DATEDIFF(year,...2011 年 12 月 31 日至 2012 年 1 月 1 日之间的时间为 1。

于 2012-04-27T09:05:36.383 回答