6

次のような PL/SQL コードがあります。

case when column between 201203 and 201201
then other_column
end

列に 201203 の値があることはわかっています。そのため、コードはいくつかの値を返す必要があります。しかし、次のように修正するまではそうではありませんでした:

case when column between 201201 and 201203
then other_column
end

なぜ between キーワードがそのように機能するのですか? Oracle データベースにどのように実装されていますか?

4

3 に答える 3

9

これはANSISQLの動作です。

 expr1 BETWEEN expr2 AND expr3

に変換されます

 expr2 <= expr1 AND expr1 <= expr3
于 2012-12-25T16:09:49.063 に答える
1

検討

val1 between val2 and val3

なので

(val1 >= val2) and (val1 <= val3)

では、私たちは何を持っていますか?

column between 201203 and 201201

と同等です

( column >= 201203 ) and (column <= 201201)

columnが、たとえば201202の場合、最初の条件 ( column >= 201203 )はfalseになり、2番目の条件もfalseになります。そのため、結果が得られません。詳細をご覧ください

于 2012-12-25T16:14:06.470 に答える
1

Between Clause では、常に高い値ではなく低い値が最初に来ます。

例:- 100 と 200 の間

それ以外の

200 と 100 の間

クエリ パーサーが100 と 200 の間で解析すると、次のようになります。

X >= 100 AND X <= 200

于 2012-12-26T06:39:03.147 に答える