SQL WHERE子句中的多个条件(AND,OR)会产生不正确的结果

时间:2014-10-19 17:09:19

标签: sql sql-server sql-server-2012

我只想从表中返回一个列表,其中返回的日期差异超过15天。它仅返回RequestStatus=1未从RequestStatus=2所在的位置返回的地方。

这是我的问题:

SELECT * 
FROM User 
WHERE RequestStatus = 1 
   OR RequestStatus = 3 
  AND (DATEDIFF(DAY, GETDATE(), TaskCompletionDate)) > 15

3 个答案:

答案 0 :(得分:4)

使用SQL IN子句为RequestStatus条件中的WHERE列指定所有合法值,例如

Select * 
from User 
Where RequestStatus in (1,2,3)
and (DATEDIFF(day, getdate(), TaskCompletionDate))> 15

答案 1 :(得分:4)

我建议将查询编写为:

select *
from User
Where RequestStatus in (1, 2, 3) and
      TaskCompletionDate > DATEADD(day, 15, getdate()) 

通过将TaskCompletionDate移到日期函数之外,可以为SQL Server提供更多优化查询的机会(例如,可能使用索引(如果可用且适当)。

答案 2 :(得分:1)

试试这个:

Select * from User Where (RequestStatus=1 or RequestStatus=3) and (DATEDIFF(day, getdate(), TaskCompletionDate))> 15