2010-11-29 3 views
4

Je souhaite créer une fonction qui renvoie une table temporaire de dates, pour la génération de rapports. Je veux être en mesure de spécifier l'intervalle pour la table dynamiquement. Voici une fonction qui encapsule mon problème.Transférer le paramètre Intervalle à Fonction dans SQL

Tenir compte:

CREATE FUNCTION [dbo].[DateAdder] 
(@DateStart datetime, 
@increment int, 
@interval ?????) 
Returns datetime 
AS 
BEGIN 
Declare @Return datetime 
SELECT @Return = DATEADD(@interval, @increment, @DateStart) 
return @Return 
END 

est-il un moyen de passer le "Intervalle" dans cette fonction?

(Évidemment, je n'essaie pas de réécrire la fonction DATEADD, je l'utilise juste comme exemple pour mettre en évidence mon problème).

À la votre!

Répondre

4

Vous ne pouvez pas transmettre un paramètre en tant qu'argument d'intervalle pour les fonctions DATExxx. La chose la plus facile à faire serait probablement de passer un varchar, puis de dupliquer la fonction DATExxx dans une instruction CASE. .: par exemple

SELECT @Return = CASE @interval 
    WHEN 'month' THEN DATEADD(month, @increment, @DateStart) 
    WHEN 'week' THEN DATEADD(week, @increment, @DateStart) 
    WHEN 'day' THEN DATEADD(day, @increment, @DateStart) 
     END 

Préférence personnelle - Je ne me souviens jamais les abréviations mignon, je sort toujours les intervalles en entier.

+0

Merci. Cela a fonctionné parfaitement. – Molloch

Questions connexes