我必须收集一个表中的所有行,这些行是在过去三个月的星期一插入的。我将如何编写WHERE子句日期以获得这些结果?
WHERE Date = (wk, DATEDIFF(wk,0,GETDATE()), 0)
这将选择本周周一的所有内容,但我遇到的问题是选择三个月前的一系列周一。
谢谢!
这就是我最终得到的WHERE子句,它对我来说很好…
where Datestamp > dateadd(month, -3, getdate())
AND datepart(weekday, Datestamp) = datepart(weekday, DATEADD(wk, DATEDIFF(wk,0,GETDATE()), 0))
我只更改了从周一开始的一周中进入日期的部分,我添加了这个。。。
DATEADD(wk, DATEDIFF(wk,0,GETDATE()), 0)
WHERE Date > dateadd(month, -3, getdate())
AND datepart(weekday, Date) = 1
这是两个独立的条件;不需要将它们压缩成一个。
注意:在您的机器上运行一个测试,以查看datepart(weekday, @AMondayDate)
的值。在一些系统中,星期一是1,在另一些系统中是2;它取决于DATEFIRST配置。
更新:
感谢ErikE的聪明技巧,克服了工作日的数字问题:
WHERE Date > dateadd(month, -3, getdate())
AND datepart(weekday, Date) = datepart(weekday, '2012-11-25')