datediff 的 Where 子句中的案例陈述

Case Statement in Where Clause for datediff

我正在尝试让报告仅显示发票日期为前一天的记录,除非今天是星期一,在这种情况下,如果发票日期为星期五,则报告将被取消。

正如标题所暗示的那样,我尝试完成此操作是在我的 where 子句中的 case 语句。

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 查询方面我完全是个菜鸟,并且充满了语法错误。上面需要更正什么才能使其正常工作?还是我完全看错了?

简单一点的怎么样:

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 子句中的函数会阻止使用索引。一个例外(唯一的例外?)是 casting datetime 值到日期。 Here 是关于该主题的博客。