选择 打开 改范围 完整检索页

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
历史版本PostgreSQL 9.2 已于 2017 年 11 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本

9.2. 比较操作符 #

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

表 9.1. 比较操作符

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

注意

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

比较操作符适用于所有相关的数据类型。所有比较操作符都是返回 boolean 类型值的二元操作符;类似 1 < 2 < 3 的表达式是无效的(因为没有用于比较布尔值和 3< 操作符)。

除比较操作符之外,还可以使用特殊的BETWEEN结构:

a BETWEEN x AND y

等价于

a >= x AND a <= y

注意,BETWEEN将两个端点值都视为包含在范围内。NOT BETWEEN执行相反的比较:

a NOT BETWEEN x AND y

等价于

a < x OR a > y

BETWEEN SYMMETRICBETWEEN相同,但不要求AND左侧的参数小于或等于右侧的参数。如果不是这样,这两个参数会自动交换,以确保表示的范围始终非空。

当任一输入为 null 时,普通的比较操作符会得到 null(表示未知),而不是真或假。例如,7 = NULL得到 null,7 <> NULL也一样。如果这种行为不合适,可以使用IS [ NOT ] DISTINCT FROM结构:

a IS DISTINCT FROM b
a IS NOT DISTINCT FROM b

对于非 null 输入,IS DISTINCT FROM<>操作符一样。不过,如果两个输入都为 null,它会返回假。而如果只有一个输入为 null,它会返回真。类似地,IS NOT DISTINCT FROM对于非 null 输入的行为与=相同,但是当两个输入都为 null 时它返回真,并且当只有一个输入为 null 时返回假。因此,这些结构实际上把 null 当作一种普通数据值,而不是未知

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

expression IS NULL
expression IS NOT NULL

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

expression ISNULL
expression NOTNULL

不要expression = NULL,因为NULL并不等于NULL。(null 值表示未知值,而我们并不知道两个未知值是否相等。)

提示

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

如果expression是行值,那么当行表达式本身为 null 或其所有字段都为 null 时,IS NULL 为真;而当行表达式本身非 null 且其所有字段都非 null 时,IS NOT NULL 为真。由于这种行为,IS NULLIS NOT NULL并不总是对行值表达式返回相反的结果;特别是,一个同时包含 null 和非 null 字段的行值表达式会对这两种测试都返回假。在某些情况下,写成row IS DISTINCT FROM NULL或者row IS NOT DISTINCT FROM 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 UNKNOWNIS NOT UNKNOWN实际上分别等同于IS NULLIS NOT NULL,只是输入表达式必须是布尔类型。

提交更正

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