0

プロジェクトの目的から始めましょう :

Date_Election_President->タイプがDatetime...の列を持つテーブルがあります。

彼の選挙の日から始めて、大統領は2年を超えることはできません

同じテーブルに、「はい」または「いいえ」のみを取るPresident_Eligibleタイプの別の列がありますvarchar(3)

  • はい - 大統領がまだ 2 年を修了していない場合
  • いいえ - 大統領が 2 年を修了した場合

President_Eligible大統領が 2 年を完了した場合に、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
)

そして、すべてのクエリにこのロジックを含めることを覚えておく必要はありません。すべてのクエリにこのロジックを含めることは、ルールが変更される可能性がある場合に危険です。

また、2 つの日付間の識別された日付部分の遷移の数をカウントするDATEDIFF(year,...ため、を行うのではなく、選挙からの日数をカウントするように変更しました。たとえば、2011 年 12 月 31 日から 2012 年 1 月 1 日までは 1 です。DATEDIFFDATEDIFF(year,...

于 2012-04-27T09:05:36.383 に答える