0

SQL Serverの同じSQLステートメントでBetween句と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'
4

3 に答える 3

5

BETWEEN 述語では、低い値を最初に、高い値を 2 番目にする必要があります。そうしないと、何も得られません。

于 2012-12-10T13:49:58.053 に答える
2

@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')

あなたが現在持っているのは上記の2番目ですが、おそらく最初のものを意味しています。

Operator Precedenceを読んでください- これは、さまざまな演算子がどの順序で実行されるかを示します。この場合AND、 は前に適用されORます。ただし、ブラケットを適切に使用して条件をグループ化すると、意図しない結果をもたらすリスク演算子の優先順位を取り除くのに役立ちます。

あなたの場合、上記の例の最初のものを望んでいると思いますが、実際には次のように合理化できます。

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')
于 2012-12-10T13:59:15.390 に答える
0

クエリに () を使用し、ステートメント間の正しい日付を使用するようにしてください (下より上)。

あなたの場合は次のようになります。

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'
于 2012-12-10T13:51:22.823 に答える