2013-03-07 3 views
0

ОК, поэтому я делаю программный инструмент, который предупреждает о CRB, срок действия которого истекает. Интервалы истечения определяются пользователем программы.Определить DATEPART по значению int в SQL

В настоящее время я использую 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

 Смежные вопросы

  • Нет связанных вопросов^_^