将Interval参数传递给SQL中的Function

时间:2010-11-29 08:04:29

标签: sql-server

我想创建一个函数,它返回一个临时的日期表,用于生成报告。我希望能够动态指定表的间隔。下面是一个封装我的问题的函数。

考虑:

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函数,我只是以此为例来突出我的问题。)

干杯!

1 个答案:

答案 0 :(得分:6)

您不能将参数作为DATExxx函数的interval参数传递。最简单的方法可能是传递varchar,然后在CASE语句中复制DATExxx函数。 E.g:

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

个人偏好 - 我永远不会记得可爱的缩写,我总是详细说出这些间隔。