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

Posted

技术标签:

【中文标题】在今天的日期之后生成具有偶数天的 n 个连续日期(例如,对于 2020-06-08,它将是 2020-06-10、2020-06-12、2020-06-14 等)【英文标题】:Generate n consecutive dates with even day-part after today's date (for example for 2020-06-08 it will be 2020-06-10, 2020-06-12, 2020-06-14 ect.) 【发布时间】:2020-06-25 16:51:46 【问题描述】:

我需要一点帮助,我不知道我的代码有问题。请帮忙。

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】:

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

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)

【讨论】:

以上是关于在今天的日期之后生成具有偶数天的 n 个连续日期(例如,对于 2020-06-08,它将是 2020-06-10、2020-06-12、2020-06-14 等)的主要内容,如果未能解决你的问题,请参考以下文章

java中,根据指定日期显示出前n天的日期

JavaScript怎么获得某一天的前一天日期

SQL 创建连续日期偶数为 0

excel图表下方日期怎么更改?

在bash中生成特定日期

如何在 PostgreSQL 中获取表的每一天的第一个日期并将其转换为 JSON