2009-09-11 11 views
0

データが格納されているSQLテーブルの1つにレート列があります。 レート列のデータがストアドプロシージャから来ています。 は、既存のストアドプロシージャでは、私はので、条件ではSQLのBRACKETS

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

      BEGIN 

9月-1月9日後に全ての期間のためにそれが真実になるように条件

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

      BEGIN 

は私が...にそれを変更しました今率は

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

のために有効であるブラケットの配置が正しいのですか?

+0

FYIとして処理されるであろう:@taxPrd> = '11/01/2001' AND @taxPrdは<'04/01/2003' 行うことができます@taxPrdの間に'11/01/2001 'と'04/01/2003' – recursive

+0

と書かれているのは明らかな以外の利点/理由ですか? – vas

+1

@ recursive、IIRC、BETWEENは両端に包括的です... – cjk

答えて

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

括弧は、達成したいものに対して正しく配置されています。

+0

フィリップ! Iは ....をBEGIN @taxPrd> = '06/01/2005' IFだけ上記条件 上記IF関連する条件がある つの更なるクエリを有する@taxPrd場合、私は> にそれを変更= '06/01/2005 'OR @taxPrd <'09/01/2009' BEGIN .... この場合、角括弧は付けませんでした。 私は2つの条件だけが括弧whneを置くべきですか? – vas