2010-11-29 25 views
4

我想創建一個函數,該函數返回一個臨時的日期表以生成報告。我希望能夠動態地指定表的間隔。下面是一個封裝我的問題的函數。將間隔參數傳遞給SQL中的函數

考慮:

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函數的interval參數。最簡單的做法可能是傳遞一個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 2010-11-29 09:16:18