2017-02-10 74 views
0

我試圖讓一個報告只顯示記錄,其中發票日期是前一天,除非今天是星期一,在這種情況下,如果發票日期是星期五,它會拉。在哪裏條款陳述的案例聲明

正如標題暗示我試圖完成這個是我的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) 

正如你可能從上面的代碼告訴,我是一個完整的noob當涉及到SQL查詢,這是充滿了語法錯誤。上面需要糾正什麼才能使其發揮作用?或者我看着這完全錯誤?

回答

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是一個關於這個主題的博客。

+0

謝謝你的知識,戈登!我在這裏得到了一個語法錯誤,''cast'附近的語法錯誤',預期爲'AS'。' – aLearningLady

+2

將'cast(dateadd(day,-1,getdate()))'更改爲'cast(dateadd(day, -1,getdate())作爲日期)'和'cast(dateadd(day,-3,getdate()))'''cast(dateadd(day,-3,getdate())as date)'@aLearningLady – scsimon