SQL Server 2008 SQL查询检索“工作周”(周二到周二)

时间:2014-10-28 07:59:19

标签: sql sql-server-2008

关于这个主题有很多帖子,但是我们仍然在努力获得一些适用于这段时间的SQL,这些帖子只是令人困惑。

我们要做的是返回时间戳为> =工作周开始的所有记录,即星期二。有人可以告诉我们哪里出错了。

即昨天是10月27日,所以当我们运行查询时,它将返回10月21日(上周二)的所有结果。今天它是28,所以当我们现在运行我们的查询时,它只返回28日的结果。明天当我们运行它时,我们将获得第28和第29 ......等等。

timestamp >= dateadd(day, -4-datepart(dw, getdate()), CONVERT(date,getdate()))

注意:昨天我们运行它时这个查询运行正常,所以我想知道它是否会在当天发生变化?

2 个答案:

答案 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)

最后了解了你的观点,你应该在这里提供一个额外的参数来指出哪一天是工作周的开始,然后很容易计算出来的日子