0

我想知道是否有人在 SQL 中有一个函数,而不是给定一个初始日期和星期几(例如星期二),它可以计算自初始日期以来的下一个日期是星期二。

例如:

鉴于:

@initialdate=01-02-2013 --今天是星期五

@dayofweek = 3 --3 表示周三,1 表示周一,7 表示周日

返回:日期=06-02-2013

也许我还没有解释清楚.. 我的意思是参数@dayofweek=3(星期三)的函数,然后我可以给出许多不同的日期:

01-02-2013 那么如果@dayofweek=3 那么下一个日期将是 06-02-2013

02-02-2013 那么如果@dayofweek=3 那么下一个日期将是 06-02-2013

03-02-2013 那么如果@dayofweek=3 那么下一个日期将是 06-02-2013

04-02-2013 那么如果@dayofweek=3 那么下一个日期将是 06-02-2013

05-02-2013 那么如果@dayofweek=3 那么下一个日期将是 06-02-2013

06-02-2013 那么如果@dayofweek=3 那么下一个日期将是 13-02-2013

07-02-2013 那么如果@dayofweek=3 那么下一个日期将是 13-02-2013

4

1 回答 1

0

这很丑陋,但我试图产生一个更优雅的解决方案的尝试并没有那么好。

请注意,这假定 DATEPART(dw, @someVarThatIsSunday) 返回 1。有关详细信息,请参阅Set DateFirst

declare @dayofweek int
set @dayofweek = 3
declare @initialDate datetime
set @initialDate = getdate()

declare @increment int

select @increment =
case DATEPART(dw, @initialDate)
    when 1 then @dayofweek
    when 2 then @dayofweek + 6
    when 3 then @dayofweek + 5
    when 4 then @dayofweek + 4
    when 5 then @dayofweek + 3
    when 6 then @dayofweek + 2
    when 7 then @dayofweek + 1
end

if @increment > 7
begin
    set @increment = @increment - 7
end

select DATEADD(day, @increment, @initialDate)
于 2013-05-15T20:09:23.177 回答