我试图让报告只显示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查询方面我是一个完整的菜鸟,并且它充满了语法错误。上面需要纠正什么才能使其发挥作用?或者我是否完全错误地看待这个?
答案 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是关于此主题的博客。