SQL中的BRACKETS条件

时间:2009-09-11 16:02:08

标签: sql sql-server sql-server-2005 tsql

我的一个SQL表中有一个Rate列,其中存储了Data。 费率栏中的数据即将进入存储过程。 在那个现有的存储过程中,我找到了条件

      BEGIN
        IF     @taxPrd <  '07/01/2000' OR 
               @taxPrd >= '11/01/2001' AND @taxPrd <  '04/01/2003' 

          BEGIN

我将其更改为...以便在sep-1/09之后的所有句号中使其成为

      BEGIN
        IF     @taxPrd <  '07/01/2000' OR 
            ( @taxPrd >= '11/01/2001' AND @taxPrd <  '04/01/2003' ) OR
               @taxPrd >= '09/01/2009'

          BEGIN

因此现在该费率对

有效
              all less than Jul2000 OR
              all in between Nov2001 and Apr2003 OR
               all more than Sep2009

括号的展示位置是否正确?

2 个答案:

答案 0 :(得分:2)

在你的情况下,括号不是必需的,(虽然为了清楚起见我将它们留在那里),因为布尔运算符AND优先于OR运算符。也就是说,只要谓词中有OR和AND的混合,就首先处理AND,然后处理结果表达式(其中包含OR)。

例如

 A Or B Or C And D Or E And F And G Or H  

将作为

处理
 A Or B Or (C And D) Or (E And F And G) Or H
              \  /          \    /   
               ||             ||                                
 A Or B Or    C&D   Or      E&F&G       Or H

答案 1 :(得分:1)

您的括号已正确放置,以达到您想要达到的效果。