我有3列,讓我們打電話給他們column A
,column B
和column C
每列是一個日期。SQL - 問題與WHERE邏輯
我想寫的,其中的邏輯是這樣的:
如果A列是NULL,或者如果C列日期比今天的今天減去3天更大
如果B欄爲空或如果C列日期大於今天的今天減去3天
如果列C是NULL,或者列C日期比今天的今天減去3天
我已經想出了這一點,但更多的時候我跑了,我丟失的物品:
(columnA IS NULL OR columnA >= Dateadd(day, -3, Getdate()))
AND
(columnB IS NULL OR columnB >= Dateadd(day, -3, Getdate()))
AND
(columnC IS NULL OR columnC >= Dateadd(day, -3, Getdate()))
這導致衝突,對於一個例子,我有一個項目被丟失,這是爲什麼:
columnA日期是小於今天的日期減去3天
columnB日期是小於今天的日期減去3天
columnC爲NULL
因此,由於columnC爲NULL,應該顯示該項目。我究竟做錯了什麼?
感謝,
我使用SQL Server Management Studio 2008中
這是一個全面的查詢。它們有點具有挑戰性,性能可能非常糟糕。看看這篇文章,它解釋了處理這種類型查詢的多種方法。 http://sqlinthewild.co.za/index。php/2009/03/19/catch-all-queries/ – 2014-10-30 16:06:52
@ user979331您已經使用了「AND」條件,只有在滿足所有3個條件的情況下才會獲取數據,因此您提到的缺失數據不符合前2條件不會出現在輸出中。使用「OR」條件並查看它是否有效。 – 2014-10-30 16:18:04
發佈一些符合條件但不符合條件的樣本數據。 – Andrew 2014-10-30 16:23:29