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 回答