【问题标题】:SQL function that given a date calculates the next date based on an day of week parameter给定日期的 SQL 函数根据星期几参数计算下一个日期
【发布时间】:2013-05-10 07:53:53
【问题描述】:

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

【问题讨论】:

  • 你能再举一些例子吗?为什么DateAdd(Day, 1, myDate) 不适合你?
  • 在 Dateadd 和 datename(dw,myDate) 之间返回星期几的名称 - 真的没那么难。
  • @MichaelGardner 我已经更新了问题..
  • @DanPichelman 我已经更新了问题..
  • 哦。您想知道给定日期/星期几,下一个匹配日期/星期几是什么时候?

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


【解决方案1】:

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

请注意,这假定 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)

【讨论】:

  • 您好,对于文化独立的方法,您可以查看:stackoverflow.com/a/38601630/5089204。
猜你喜欢
  • 2011-08-24
  • 2018-07-14
  • 1970-01-01
  • 2010-09-19
  • 2019-07-05
  • 2017-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多