2010-11-29 2 views
4

Я хочу создать функцию, которая возвращает временную таблицу дат для генерации отчета. Я хочу, чтобы указать динамический интервал для таблицы. Ниже приведена функция, которая инкапсулирует мою проблему.Параметр Pass Interval для функции в 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 

Есть ли способ, чтобы пройти "Interval" в эту функцию?

(Очевидно, я не пытаюсь переписать функцию DATEADD, я просто использую это как пример, чтобы выделить мою проблему).

Cheers!

ответ

4

Вы не можете передать параметр в качестве аргумента интервала для функций DATExxx. Проще всего было бы сдать varchar, а затем дублировать функцию DATExxx внутри оператора CASE. Например .:

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

Смежные вопросы