如何在while中使用DateAdd

时间:2015-02-27 20:09:04

标签: sql sql-server tsql

我创建了一个函数来获取接下来四周的日期。为此,我使用下面的代码。但是我不知道并且得到错误。

    create function GetNextDays()
returns @somedays table
(

dayDate date
)
as
begin
declare @today date=getdate()
declare @index int=0
while @index<3
    begin
    insert @somedays(dayDate) values(@today)
    set @index=@index+1;
     DATEADD(DD,7,CAST(@today AS DATE))
    end
return
end

我得到了这个错误:

  

'DATEADD'附近的语法不正确。

2 个答案:

答案 0 :(得分:3)

你根本不应该使用循环。你应该使用数字或计数表。我在这里把它放在这里让你看。我有一个关于我的系统的视图,我可以使用这种类型的东西,而不需要循环。

WITH
    E1(N) AS (select 1 from (values (1),(1),(1),(1),(1),(1),(1),(1),(1),(1))dt(n)),
    E2(N) AS (SELECT 1 FROM E1 a, E1 b), --10E+2 or 100 rows
    E4(N) AS (SELECT 1 FROM E2 a, E2 b), --10E+4 or 10,000 rows max
    cteTally(N) AS 
    (
        SELECT  ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) FROM E4
    )

select DATEADD(day, N, cast(getdate() as DATE))
from cteTally
where N <= 3

答案 1 :(得分:1)

你应该在DateADD之前使用set。见下面的代码:

   alter function GetNextDays()
returns @somedays table
(

dayDate date
)
as
begin
declare @today date=getdate()
declare @index int=0
while @index<3
    begin
    insert @somedays(dayDate) values(@today)
    set @index=@index+1;
    set @today= DATEADD(DD,7,cast(@today as date))
    end
return
end

chnage this Line:

DATEADD(DD,7,CAST(@today AS DATE))

with:

set @today= DATEADD(DD,7,cast(@today as date))