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

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

4

3 回答 3

9

这是 ANSI SQL 行为。

 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 )将为假,第二个条件也将为假。这就是为什么你没有得到任何结果。了解更多

于 2012-12-25T16:14:06.470 回答
1

在 Between 子句中,总是先出现较低的价值,而不是较高的价值。

例如:- 100 到 200 之间

代替

200 到 100 之间

当查询解析器解析介于 100 和 200 之间时,它将是这样的:-

X >= 100 且 X <= 200

于 2012-12-26T06:39:03.147 回答