SQL Server BETWEEN 和 OR 语句用法



我正在尝试在SQL Server的同一SQL语句中使用Between and OR子句,每次我得到空结果时,任何人都对此有所了解?我原来的SQL是这样形成的:

SELECT * 
FROM opportunity AS oppt
WHERE oppt.Location='O/S' 
   OR oppt.Location='Overseas' 
  AND oppt.OPEN_DATE BETWEEN '2014-01-01 00:00:00.000' 
                         AND '2010-01-01 00:00:00.000'

BETWEEN 谓词要求较低的值是第一个,较高的值是第二个,否则您将一无所获。

为了补充@RBarryYoung的答案,我还建议您在条件周围加上括号。这使得它明确,你打算成为什么结果/应该如何应用条件。

WHERE (oppt.Location='O/S' 
   OR oppt.Location='Overseas')
  AND oppt.OPEN_DATE BETWEEN '2014-01-01 00:00:00.000' 
                         AND '2010-01-01 00:00:00.000'

不同于:

WHERE oppt.Location='O/S' 
   OR (oppt.Location='Overseas'
  AND oppt.OPEN_DATE BETWEEN '2014-01-01 00:00:00.000' 
                         AND '2010-01-01 00:00:00.000')

这是您目前拥有的上述第二个,而您可能是指第一个。

阅读运算符优先级 - 这告诉您以哪种顺序执行各种运算符。在这种情况下,ANDOR 之前应用。但是,适当地使用括号对条件进行分组有助于消除具有意外后果的风险运算符优先级。

怀疑在你的情况下,你想要我上面的第一个例子,实际上你可以合理化为:

WHERE oppt.Location IN ('O/S', 'Overseas')
      AND oppt.OPEN_DATE BETWEEN '2010-01-01 00:00:00.000' 
                             AND '2014-01-01 00:00:00.000')

尝试使用 () 进行查询并更正语句之间的日期(低于高于),

在您的情况下,它将是:

SELECT * 
FROM opportunity AS oppt
WHERE (oppt.Location='O/S' OR oppt.Location='Overseas')
    AND oppt.OPEN_DATE BETWEEN '2010-01-01' AND '2014-01-01'

最新更新