如何从提供的日期或GetDate()获取当月的任何月份的上周X日期

时间:2013-12-03 11:17:59

标签: sql sql-server date week-number weekday

反向问题是 - 如何确定日期是否在月的最后一周?

例如,使用GetDate(),我怎么知道今天的日期或给定日期是在该月的最后一周。 因为MSSQL中的周数可以是4或5。

假设我想要获取每个月的上周六的日期。 但是在2013年12月的SQL第5周(2013年12月的最后一周)没有星期五。 12月的最后一周以星期二的31日结束。 因此,我需要跳过12月并进一步延长到2014年1月,但上周也将于周五31日结束。 所以,继续前进....

那么,如何从指定日期或今天的日期获取上周X日的日期?

感谢。

1 个答案:

答案 0 :(得分:1)

您可以使用以下代码。它基于周一开始,周日结束:

declare @date as date = '20131230' -- this is the date you check

declare @lastdayofmonth as date = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@date)+1,0))
declare @lastweekstart as date = dateadd(d, -datepart(dw, @lastdayofmonth)+2, @lastdayofmonth)
if datepart(m, @lastdayofmonth) <> datepart(m, @lastweekstart)
    set @lastweekstart = dateadd(d, -7, @lastweekstart)

if @date >= @lastweekstart and @date <= @lastdayofmonth
    print 'Within last week'
else
    print 'Not within last week'