【问题标题】:Get records from the week until the given date获取从一周到给定日期的记录
【发布时间】:2013-08-27 15:04:31
【问题描述】:

如何在 SQL Server 2005 中获取记录。输入将是工作日日期。输出应该是该日期前那一周的所有记录。例如,如果我给出一个星期三的日期,我应该得到该周星期一到星期三的所有记录。

当输入工作日作为输入时,我已尝试使用此方法获取特定一周内的所有记录。但我想要记录到星期一的给定日期。

where RD.Date > DATEADD(dd, -(DATEPART(dw, @Date)-1), @Date) and RD.Date < DATEADD(dd, 7-(DATEPART(dw, @Date)), @Date)

提前感谢您的帮助!

【问题讨论】:

    标签: sql sql-server-2005


    【解决方案1】:

    这个怎么样?

     WHERE RD.Date BETWEEN DATEADD(wk, DATEDIFF(wk,0,@Date), 0) AND @Date
    

    我知道在 SQL Server 中,BETWEEN 强制进行包容性搜索,因此您可以针对 RD.DATE 执行 > 和

    【讨论】:

      【解决方案2】:

      这应该可行:

      SET DATEFIRST 1
      ...
      WHERE RD.Date >= DATEADD(dd, (-1) * (DATEPART(dw, @Date) - 1), @Date)
      AND   RD.Date < DATEADD(dd, 1, @Date) -- inclusive
      

      DATEPART(dw, @Date) 返回一周中的天数,因此对于星期三它返回 3。但是由于您想包括星期一,所以我需要减去 1。

      MSDN根据Lamak的评论:

      当datepart为星期(wk, ww)或工作日(dw)时,返回值 取决于使用 SET DATEFIRST 设置的值。

      【讨论】:

      • 根据DATEFIRST的设置返回3,不是绝对值
      • @Lamak:谢谢。相应地编辑了我的答案。
      猜你喜欢
      • 1970-01-01
      • 2019-10-11
      • 1970-01-01
      • 1970-01-01
      • 2014-04-30
      • 2021-12-21
      • 1970-01-01
      • 1970-01-01
      • 2017-07-19
      相关资源
      最近更新 更多