如果y <&lt;则x和y之间的PL / SQL“不起作用。 X。为什么?

时间:2012-12-25 16:02:43

标签: oracle plsql

我有一个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

为什么关键字之间会这样?它是如何在Oracle数据库上实现的?

3 个答案:

答案 0 :(得分:9)

这是ANSI SQL行为。

 expr1 BETWEEN expr2 AND expr3

转换为

 expr2 <= expr1 AND expr1 <= expr3

答案 1 :(得分: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 )将是假的,第二个也将是假的。这就是为什么你没有得到任何结果。 Find out more

答案 2 :(得分:1)

在“条款”之间,始终是较低的值而不是较高的值。

例如: - 在100和200之间

而不是

BETWEEN 200和100

当Query Parser Parse BETWEEN 100 AND 200 时,它会是这样的: -

X&gt; = 100且X <= 200