【问题标题】:How to get date of last week's X day for any month from provided date or from GetDate() for current month如何从提供的日期或从当前月份的 GetDate() 获取任何月份的上周 X 天的日期
【发布时间】:2013-12-19 10:09:05
【问题描述】:

反题是—— 如何确定日期是否在一个月的最后一周?

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

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

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

谢谢。

【问题讨论】:

  • 那么,您希望将 12 月 27 日作为 2013 年 12 月的最后一个星期五吗?
  • 我觉得你的叙述不是很清楚 - 你能给出一些示例输入日期以及解决方案需要从这些示例输入中计算出的日期吗?
  • @Raj NO.在这种情况下,我需要忽略 12 月和 1 月到 4 月,因为他们的最后一周没有星期六。所以,直接在五月到达,因为五月的最后一周是星期六。
  • @Damien_The_Unbeliever 给定日期是 GetDate() 或 startdate,我们需要在某个时间点到达。假设 StartDate 是 2013 年 12 月 1 日。我们需要到达这样的日期,该日期将在每月的最后一周重要,也是星期六。但是作为 12 月-> 4 月,上周没有一个月有星期五。所以,最后我们得到了 2013 年 5 月 31 日是星期六的 5 月。希望它可能会清楚一些。不要担心开始日期它可以是任何东西。我们需要进一步了解上周的情况。谢谢。
  • 那么,是否有更好的说法是,从特定的开始日期开始,您需要找到最早的日期,即相应月份的第 5 个星期五?

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


【解决方案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'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-09
    相关资源
    最近更新 更多