获取今天和明天的记录,忽略周末

时间:2017-01-09 12:23:33

标签: sql sql-server-2008 tsql if-statement between

我刚设置了下面的过滤器,只检索今天和明天的项目(工作正常):

BETWEEN { fn CURDATE() } AND DATEADD(day; 1; GETDATE())

但是周五我必须得到星期一的项目 - 我试图围绕这个设置一个IF声明,但我根本没有运气。下面是一个例子(不起作用),但我对如何正确写这个问题感到难过:

IF DATEPART(WEEKDAY, GETDATE()) IN (6)
THEN BETWEEN { fn CURDATE() } AND DATEADD(day; 3; GETDATE())
ELSE BETWEEN { fn CURDATE() } AND DATEADD(day; 1; GETDATE())

1 个答案:

答案 0 :(得分:4)

怎么样:

where (datepart(weekday, getdate()) = 6 and
       datecol between cast(getdate() as date) and cast(getdate() + 3 as date)
      ) or
      (datepart(weekday, getdate()) <> 6 and
       datecol between cast(getdate()as date) and cast(getdate() + 1as date)
      ) 

注意:我不喜欢使用between日期/日期时间。 Aaron Bertrand有一个很好的blog帖子解释了这一点。 BETWEEN对于日期是安全的,因此我将离开逻辑,因为您似乎已经指定了它。