↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1
历史版本PostgreSQL 8.0 已于 2010 年 10 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

9.2. 比较操作符 #

常见的比较操作符都可用,如表 9.1所示。

表 9.1. 比较操作符

Operator 描述
< 小于
> 大于
<= 小于或等于
>= 大于或等于
= 等于
<> or != not equal

注意

!= 操作符在解析器阶段会转换为 <>。不可能实现行为不同的 != 和 <> 操作符。

比较操作符适用于所有相关的数据类型。所有比较操作符都是返回 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周期之外,两种形式之间没有任何区别。

要检查一个值是否为 null,使用下面的结构:

expression IS NULL
expression IS NOT NULL

或者等效但非标准的结构:

expression ISNULL
expression NOTNULL

不要写expression = NULL,因为NULL并不“等于”NULL。(null 值表示未知值,而我们并不知道两个未知值是否相等。)这一行为符合 SQL 标准。

提示

有些应用可能期望表达式expression = NULL在expression求值为 null 时返回真。我们强烈建议此类应用修改为遵循 SQL 标准。但是,如果无法这样修改,那么可以使用配置变量transform_null_equals。如果将其打开,PostgreSQL会把x = NULL子句转换成x IS NULL。这是PostgreSQL 6.5 到 7.1 版本中的默认行为。

当任一输入为 null 时,普通的比较操作符会得到 null(表示“未知”)。进行比较的另一种方式是使用IS DISTINCT FROM结构:

expression IS DISTINCT FROM expression

对于非 null 输入,它和<>操作符一样。不过,如果两个输入都为 null,它会返回假。而如果只有一个输入为 null,它会返回真。因此,它实际上把 null 当作一种普通数据值,而不是“未知”。

布尔值也可以使用下列结构进行测试:

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

这些谓词总是返回真或假,从不返回空值,即使操作数为 null 也是如此。null 输入被当作逻辑值“未知”。请注意,IS UNKNOWN和IS NOT UNKNOWN实际上分别等同于IS NULL和IS NOT NULL,只是输入表达式必须是布尔类型。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。