在今天的日期之后生成连续的n个日期,其中偶数部分为天(例如,对于2020-06-08,它将是2020-06-10、2020-06-12、2020-06-14等)

时间:2020-06-25 16:51:46

标签: sql sql-server date stored-procedures recursive-query

我需要一些帮助,我不知道wat在我的代码中是错误的。请帮助。

create procedure  consecutive_N_even_day
@n  int 
as
begin
declare @na int
set @na = 0
declare @nexndate date
declare @date date
set @date=GETDATE()
declare @datepart int



while(@na<@n)
    begin
    
    set @nexndate=DATEADD(DAY,@na,@date)
    set @datepart=DATEPART(day,@nexndate)

    if @datepart%2=0
        begin
            
            print @nexndate;
            
        end
    set @na=@na+1
    
    end
    
end

1 个答案:

答案 0 :(得分:2)

您可以为此使用递归查询:

with cte as (
    select dateadd(day, day(getdate()) % 2, cast(getdate() as date)) dt, 0 n
    union all 
    select dateadd(day, 2, dt), n + 1 from cte where n < @n
)
select * from cte

查询从今天(如果是偶数日)或明天开始,然后产生一系列以2天为增量的日期。迭代@n次。

如果我们到达一个天数不均匀的月底时,您没有指定该怎么办。在这种情况下,始终可以使查询的递归部分的逻辑适应您的实际需求。

如果@n大于100,则需要在查询的最后添加option (maxrecursion 0)