Определить DATEPART по значению int в SQL

Итак, я делаю программный инструмент, который предупреждает об истечении срока действия 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 использовать в зависимости от сохраненного целого числа? Или есть другой способ сделать это?


person Weebie    schedule 07.03.2013    source источник


Ответы (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()
person ybo    schedule 07.03.2013
comment
Это была достаточная помощь, очень признательна! - person Weebie; 11.03.2013