2014-01-15 52 views
0

我試圖將表中的結果限制在與日期不重疊的記錄中。正如你在下面的截圖中看到的,我試圖添加一個子句來過濾掉等於「結束」列的記錄。查看該查詢的最後一行。爲什麼這個「where」子句不會限制sql結果

我不明白爲什麼結果仍然顯示屏幕截圖中的記錄。有人可以幫我解釋嗎?這可能是一個語法的東西?

謝謝!

SQL Where clause not filtering

+4

提示:在唯一無用的地方使用括號。 –

+2

代碼作爲圖像不是很有用 – niyou

回答

5

您主要有:

a OR b AND c AND d AND e AND f 

...你可能想:

(a OR b) AND c AND d AND e AND f 

參考:Operator Precedence

+0

謝謝,就是這樣。使總體感覺! – Jorre

2

AND具有更高的operator precedenceOR有。

這意味着,你AND條款將被首先解釋,以便在年底有類似

where (...) or (... and ... and ...) 

由於OR('2014-01-14 18:30:00' between start and end))之前,滿足第一個條件,你的行顯示了。將OR條款的雙方置於禁忌之列,並且應該按照您的要求工作。

1

問題是您的WHERE子句的第一部分正在傳遞該記錄。我相信你需要更多的括號。

我並不完全確定您試圖使用您提供的數據實現的目標,但在關鍵字OR和最後的右括號之後應該有一個左括號。

像這樣:

where 
('2014-01-14 18:30:00' between start and end) 
or (('2014-01-14 19:30:00' between start and end) 
and ('2014-01-14 18:30:00' != start) 
and ('2014-01-14 19:30:00' != end) 
and ('2014-01-14 19:30:00' != start) 
and ('2014-01-14 18:30:00' != end)) 
1

由於2014-01-14 18:30是其爲TRUE條件2014-01-14 16:002014-01-14 18:30之間。並且[(TRUE)或(其他)]也是TRUE

相關問題