9.2. 比较操作符

可用的比较操作符在 Table 9-1 显示。

Table 9-1. 比较操作符

操作符描述
< 小于
> 大于
<= 小于或等于
>= 大于或等于
= 等于
<>!= 不等于

注意: != 操作符在分析器阶段被转换成 <>。把 !=<> 操作符实现为做不同的事是不可能的。

比较操作符可以用于所有可以比较的数据类型。 所有比较操作符都是双目操作符,返回 boolean 类型数值; 象1 < 2 < 3 这样的表达式是非法的 (因为没有什么 < 操作符用于 在布尔值和3之间做比较)。

除了比较操作符以外,我们还可以使用 BETWEEN 构造。

a BETWEEN x AND y

等效于

a >= x AND a <= y

类似的还有

a NOT BETWEEN x AND y

等效于

a < x OR a > y

这两种形式之间没有甚么区别,只不过第一种形式需要一些 CPU 周期在内部将它改写成第二种形式。 BETWEEN SYMMETRICBETWEEN 一样,只是没有要求 AND 左边的参数小于或等于右边的参数; 合适的范围是自动计算出来的。

要检查一个值是否为 NULL,使用下面构造

expression IS NULL
expression IS NOT NULL

或者等效,但并不标准的构造

expression ISNULL
expression NOTNULL

不要expression = NULL 因为 NULL 是不"等于" NULL 的。(NULL 代表一个未知的数值,因此我们无法知道两个未知的数值是否相等。) 这个行为遵循 SQL 标准。

提示: 有些应用可能要求表达式 expression = NULLexpression 得出 NULL 值地时候返回真。 我们强烈建议这样的应用修改成遵循 SQL 标准。但是,如果这样修改是不可能的,那么我们可以使用配置变量 transform_null_equals。 如果打开它, PostgreSQL 将把 x = NULL 子句转换成 x IS NULL。 在 PostgreSQL 版本 6.5 到 7.1 之间,这是缺省的行为。

如果有任何一个输入是空,那么普通的比较操作符生成空(表示"未知")。 另外一个比较的方法是用 IS DISTINCT FROM 构造:

expression IS DISTINCT FROM expression

对于非空输入,这个与 <> 操作符相同。 但是,假如两个输入都是空,那么它将返回假,而如果只有一个输入是空,那么它将返回真。 这样就很有效地把空当作一个普通地数据值看待,而不是"未知"

布尔数值可以用下面的构造进行测试

expression IS TRUE
expression IS NOT TRUE
expression IS FALSE
expression IS NOT FALSE
expression IS UNKNOWN
expression IS NOT UNKNOWN

这些构造将总是返回真或假,从来不返回空值,即使操作数是空也如此。 空值输入被当做逻辑数值"未知"。 请注意实际上 IS UNKNOWNIS NOT UNKNOWN 分别与 IS NULLIS NOT NULL 相同, 只是输入表达式必须是布尔类型。