2010-11-29 25 views
4

レポートの生成のために、一時的な日付のテーブルを返す関数を作成したいとします。私は動的にテーブルの間隔を指定できるようにしたい。以下は私の問題をカプセル化する関数です。SQLのIntervalパラメータに関数を渡す

は考えてみましょう:

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 

は、この関数に "間隔" を渡す方法はありますか?

(明らかに、私はDATEADD関数を書き直そうとしていないため、これを例として問題を浮き彫りにしています)。

乾杯!

答えて

4

DATExxx関数のインターバル引数としてパラメータを渡すことはできません。最も簡単なことはおそらくvarcharを渡して、CASE文の中でDATExxx関数を複製することでしょう。例えば:

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 

個人的な好み - 私は常に完全に間隔を綴る、キュートな略語を覚えていることはできません。

+0

ありがとうございました。これは完全に機能しました。 – Molloch

関連する問題