2010-11-29 47 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