1

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

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

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

我在这里先向您的帮助表示感谢!!

4

2 回答 2

3

这个怎么样?

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

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

于 2013-08-27T15:13:17.977 回答
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 为 week (wk, ww) 或 weekday (dw) 时,返回值取决于使用 SET DATEFIRST 设置的值。

于 2013-08-27T15:12:09.043 回答