PostgreSQL 9.0.4 中文文档 | ||||
---|---|---|---|---|
Prev | Fast Backward | Chapter 9. 函数和操作符 | Fast Forward | Next |
可用的比较操作符,在Table 9-1显示
Note: !=操作符在分析器阶段被转换成<>。 !=和<>操作符是完全等价的。
比较操作符可以用于所有可以比较的数据类型。 所有比较操作符都是二元操作符,返回boolean类型数值; 像1 < 2 < 3这样的表达式是非法的(因为布尔值和3之间不能做比较)。
除了比较操作符以外,我们还可以使用BETWEEN构造。
aBETWEENxANDy
等效于
a>=xANDa<=y
请注意BETWEEN处理范围包含端点的值。 NOT BETWEEN做相反的比较:
aNOT BETWEENxANDy
类似的还有
a<xORa>y
这两种形式之间没有什么区别,只不过第一种形式需要一些CPU周期在内部将它改写成第二种形式。 BETWEEN SYMMETRIC和BETWEEN一样,只是没有要求AND左边的参数小于或等于右边的参数;
要检查一个值是否为NULL,使用下面的构造:
expressionIS NULL expressionIS NOT NULL
或者等效,但并不标准的构造
expressionISNULL expressionNOTNULL
不要写expression= NULL 因为NULL并不代表NULL,而是代表一个未知的数值,因此我们无法知道两个未知的数值是否相等。这个行为遵循SQL标准
Tip: 有些应用可能要求表达式expression= NULL在expression为NULL时返回真。 我们强烈建议这样的应用修改成遵循SQL标准。然而,如果不可能,那么可以使用transform_null_equals配置参数。 此时PostgreSQL可以将x = NULL语句转换成x IS NULL。
Note: 如果expression是行值,那么当行表达式本身为NULL或该行的所有字段都为 NULL 时, IS NULL将为真;当行表达式本身不为NULL并且该行的所有字段都不为 NULL 时, IS NOT NULL也将为真。由于这个习惯,IS NULL和IS NOT NULL 不会返回行值表达式的逆结果,一个同时包内含NULL和NON-NULL值的行值表达式对二者都会返回假。 这个规定符合SQL标准,但是与8.2之前的版本不兼容。
如果有任何一个输入是NULL,那么普通的比较操作符生成NULL(表示"未知")。 例如,7 = NULL生成NULL。当这种方式不合适时, 可以用IS[NOT]DISTINCT FROM构造
expressionIS DISTINCT FROMexpression expressionIS NOT DISTINCT FROMexpression
对于非NULL的输入IS DISTINCT FROM与<>操作符相同。但是,如果两个输入都是NULL, 那么它将返回假;如果只有一个输入是NULL,那么它将返回真。类似的, 对于非 NULL 的输入IS NOT DISTINCT FROM与=操作符相同。但是,如果两个输入都是NULL, 那么它将返回真;如果只有一个输入是NULL,那么它将返回假。这样就很有效地把NULL 当作一个普通数据值看待,而不是"未知"。
布尔数值可以用下面的构造进行测试
expressionIS TRUE expressionIS NOT TRUE expressionIS FALSE expressionIS NOT FALSE expressionIS UNKNOWN expressionIS NOT UNKNOWN
这些构造将总是返回真或假,从来不返回NULL,即使操作数是NULL 也如此。NULL输入被当做逻辑数值"未知"。 请注意实际上IS UNKNOWN和IS NOT UNKNOWN分别与IS NULL和IS NOT NULL 相同,只是输入表达式必须是布尔类型。