2013-03-07 1 views
0

OK, donc je suis en train de faire un outil logiciel qui alerte les CRB qui vont expirer. Les intervalles d'expiration sont déterminés par l'utilisateur du programme. Je suis actuellement en train d'utiliser SQL Server 2008. Donc j'essaye de faire une instruction SQL qui récupérera tous les enregistrements qui sont en dehors de cette période d'expiration. Voici le concept que je suis en train de réaliser:Déterminer DATEPART par int valeur dans 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() 

Comme vous pouvez le voir, le tableau contient le type intervalle d'expiration (jours, semaines, mois, années), la valeur d'intervalle, et la date à laquelle je besoin d'ajouter l'intervalle à.

Je reçois une erreur dans le premier paramètre de la fonction DATEADD car elle attend un DATEPART et non un nombre entier. Existe-t-il un moyen de déterminer quel DATEPART utiliser en fonction de l'entier stocké? Ou est-ce qu'il y a un autre moyen de le faire?

Répondre

1

Il pourrait être un peu bavard, mais la réponse évidente serait:

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

Ce fut assez d'aide, grandement appréciée! – Weebie