我只想返回表中返回日期差異超過15天的列表。它只返回RequestStatus=1
沒有從哪裏得到RequestStatus=2
。SQL WHERE子句中的多個條件(AND,OR)會產生不正確的結果
這裏是我的查詢:
SELECT *
FROM User
WHERE RequestStatus = 1
OR RequestStatus = 3
AND (DATEDIFF(DAY, GETDATE(), TaskCompletionDate)) > 15
我只想返回表中返回日期差異超過15天的列表。它只返回RequestStatus=1
沒有從哪裏得到RequestStatus=2
。SQL WHERE子句中的多個條件(AND,OR)會產生不正確的結果
這裏是我的查詢:
SELECT *
FROM User
WHERE RequestStatus = 1
OR RequestStatus = 3
AND (DATEDIFF(DAY, GETDATE(), TaskCompletionDate)) > 15
使用SQL IN
子句指定您WHERE
條件RequestStatus
列所有合法的數值一樣
Select *
from User
Where RequestStatus in (1,2,3)
and (DATEDIFF(day, getdate(), TaskCompletionDate))> 15
試試這個:
Select * from User Where (RequestStatus=1 or RequestStatus=3) and (DATEDIFF(day, getdate(), TaskCompletionDate))> 15
+1 @戈登我解決了問題的括號,但他優化了查詢....對不起,我沒有太多的名譽,在您的答案 – 2014-10-19 17:20:18
我會建議將查詢寫爲:
select *
from User
Where RequestStatus in (1, 2, 3) and
TaskCompletionDate > DATEADD(day, 15, getdate())
的日期功能外移動TaskCompletionDate
,你給SQL Server的更多機會,以優化查詢(例如,通過可能使使用索引,如果可用的和適當的)。
+1。如果你將注意力放在如何結合幾種條件以及如何使用'IN'上,它可能對問題OP更有幫助。優化也很重要,但目前可能不是OP的主要關注點。 – stakx 2014-10-19 17:19:16
非常感謝您的詳細解答 – 2014-10-19 18:24:34
感謝它現在工作正常:) – 2014-10-19 17:15:46