给定日期的SQL函数根据星期几参数计算下一个日期

时间:2013-05-15 16:19:48

标签: date sql-server-2008-r2 user-defined-functions dayofweek

我想知道某人是否在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

1 个答案:

答案 0 :(得分: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)