0

よし、期限が切れる CRB を警告するソフトウェア ツールをやっている。有効期限の間隔は、プログラムのユーザーによって決定されます。

現在、SQL Server 2008 を使用しています。そのため、この有効期限外のすべてのレコードを取得する SQL ステートメントを実行しようとしています。以下は、私が達成しようとしているコンセプトです。

Declare @ExpiryType as int -- (0=Days,1=Weeks,2=Months,3=Years)
Declare @ExpiryValue as int -- Interval of expiry
Declare @DateOfIssue as date -- Date of last CRB check

SELECT * FROM tblDBS_Details 
WHERE DATEADD(@ExpiryType, @ExpiryValue, @DateOfIssue) <= GETDATE()

ご覧のとおり、テーブルには有効期限の間隔の種類 (日、週、月、年)、間隔の値、および間隔を追加する必要がある日付が含まれています。

DATEADD 関数の最初のパラメーターで、整数ではなく DATEPART が予期されるため、エラーが発生します。格納された整数に応じて使用する DATEPART を決定する方法はありますか? または、これを行う別の方法はありますか?

4

1 に答える 1

1

少し冗長かもしれませんが、明らかな答えは次のとおりです。

SELECT * FROM tblDBS_Details 
WHERE 
    CASE @ExpiryType
    WHEN 0 THEN DATEADD(D, @ExpiryValue, @DateOfIssue)
    WHEN 1 THEN DATEADD(W, @ExpiryValue, @DateOfIssue)
    WHEN 2 THEN DATEADD(M, @ExpiryValue, @DateOfIssue)
    WHEN 3 THEN DATEADD(Y, @ExpiryValue, @DateOfIssue)
    END <= GETDATE()
于 2013-03-07T10:19:54.367 に答える