SQL Server 2008 SQL 查询检索'working week'(星期二至星期二)



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

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

即昨天是10月27日,所以当我们运行查询时,它将返回10月21日(前一个星期二)的所有结果。今天是28号,所以当我们现在运行查询时,它只会返回28号的结果。明天当我们进行比赛时,我们将获得第28名和第29名。。。。等

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

注意:当我们昨天运行这个查询时,它运行得很好,所以我想知道它是否每天都在更改?

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的评论,当我们使用这些方法时,我们假设一周的开始日默认为美国英语的周日。更多信息请参阅本文档。

SET DATEFIRST 7可以确保这种方法是正确的。

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

最新更新