2013-03-07 47 views
0

好的,所以我正在做一個軟件工具來提醒即將到期的CRB。到期時間間隔由程序的用戶決定。用SQL中的int值確定DATEPART

我目前正在使用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?還是有另一種方法來做到這一點?

回答

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() 
+0

那是足夠的幫助,不勝感激! – Weebie 2013-03-11 08:53:04