我想创建一个函数,它返回一个临时的日期表,用于生成报告。我希望能够动态指定表的间隔。下面是一个封装我的问题的函数。
考虑:
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
函数,我只是以此为例来突出我的问题。)
干杯!
答案 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
个人偏好 - 我永远不会记得可爱的缩写,我总是详细说出这些间隔。