在dateiff

时间:2017-02-10 20:40:50

标签: sql tsql case where

我试图让报告只显示INVOICE日期是前一天的记录,除非今天是星期一,在这种情况下,如果INVOICE日期是星期五,它将拉动。

正如标题所暗示的那样,我在where子句中尝试完成此操作是一个案例陈述。

WHERE
(case when datepart(dw,GETDATE()) <> 2 
then (INVOICE >= dateadd(day,datediff(day,1,GETDATE()),0)) 
else INVOICE >= dateadd(day,datediff(day,3,GETDATE()),0) end)
and (case when datepart(dw,GETDATE()) <> 2 
then (INVOICE < dateadd(day,datediff(day,0,GETDATE()),0)) 
else INVOICE <dateadd(day,datediff(day,2,GETDATE()),0) end)

正如您可以从上面的代码中看出的那样,在SQL查询方面我是一个完整的菜鸟,并且它充满了语法错误。上面需要纠正什么才能使其发挥作用?或者我是否完全错误地看待这个?

1 个答案:

答案 0 :(得分:2)

更简单的事情:

where (datepart(dw, GETDATE()) <> 2 and
       cast(invoice as date) = cast(dateadd(day, -1, getdate()) as date)
      ) or
      (datepart(dw, GETDATE()) = 2 and
       cast(invoice as date) = cast(dateadd(day, -3, getdate()) as date)
      ) 

通常,where子句中的函数会阻止使用索引。一个例外(唯一的例外?)是 datetime值转换为日期。 Here是关于此主题的博客。

相关问题