我有一个 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 数据库上实现的?
这是 ANSI SQL 行为。
expr1 BETWEEN expr2 AND expr3
翻译成
expr2 <= expr1 AND expr1 <= expr3
考虑
val1 between val2 and val3
作为
(val1 >= val2) and (val1 <= val3)
那我们有什么?
column between 201203 and 201201
相当于
( column >= 201203 ) and (column <= 201201)
如果该column
值为 201202,那么第一个条件
( column >= 201203 )
将为假,第二个条件也将为假。这就是为什么你没有得到任何结果。了解更多。
在 Between 子句中,总是先出现较低的价值,而不是较高的价值。
例如:- 100 到 200 之间
代替
200 到 100 之间
当查询解析器解析介于 100 和 200 之间时,它将是这样的:-
X >= 100 且 X <= 200