我有一个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数据库上实现的?
答案 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