关于这个主题有很多帖子,但是我们仍然在努力获得一些适用于这段时间的SQL,这些帖子只是令人困惑。
我们要做的是返回时间戳为> =工作周开始的所有记录,即星期二。有人可以告诉我们哪里出错了。
即昨天是10月27日,所以当我们运行查询时,它将返回10月21日(上周二)的所有结果。今天它是28,所以当我们现在运行我们的查询时,它只返回28日的结果。明天当我们运行它时,我们将获得第28和第29 ......等等。
timestamp >= dateadd(day, -4-datepart(dw, getdate()), CONVERT(date,getdate()))
注意:昨天我们运行它时这个查询运行正常,所以我想知道它是否会在当天发生变化?
答案 0 :(得分:2)
Mod 7请:
select
dateadd(day, -(datepart(dw, getdate() ) + 4)%7, getdate())
,dateadd(day, -(datepart(dw, '2014-10-28' ) + 4)%7, '2014-10-28') --2014-10-28
,dateadd(day, -(datepart(dw, '2014-10-27' ) + 4)%7, '2014-10-27') --2014-10-21
,dateadd(day, -(datepart(dw, '2014-10-29' ) + 4)%7, '2014-10-29') --2014-10-28
<强>更新强>
根据@ hvd的评论,当我们使用这些方法时,我们假设一周的开始日是美国英语的默认星期日。 this document中的更多信息。
SET DATEFIRST 7
可以确保此方法正确无误。
答案 1 :(得分:-1)
最后了解了你的观点,你应该在这里提供一个额外的参数来指出哪一天是工作周的开始,然后很容易计算出来的日子