pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
常见的比较操作符都可用,如表 9.1所示。
表 9.1. 比较操作符
| Operator | 描述 |
|---|---|
< |
小于 |
> |
大于 |
<= |
小于或等于 |
>= |
大于或等于 |
= |
等于 |
<> or != |
not equal |
!= 操作符在解析器阶段会转换为 <>。不可能实现行为不同的 != 和 <> 操作符。
比较操作符适用于所有相关的数据类型。所有比较操作符都是返回 boolean 类型值的二元操作符;类似 1 < 2 < 3 的表达式是无效的(因为没有用于比较布尔值和 3 的 < 操作符)。
aBETWEENxANDy
等价于
a>=xANDa<=y
类似地,
aNOT BETWEENxANDy
等价于
a<xORa>y
除了把第一种形式在内部改写成第二种形式所需的CPU周期之外,两种形式之间没有任何区别。
expressionIS NULLexpressionIS NOT NULL
或者等效但非标准的结构:
expressionISNULLexpressionNOTNULL
不要写,因为expression = NULLNULL并不“等于”NULL。(null 值表示未知值,而我们并不知道两个未知值是否相等。)这一行为符合 SQL 标准。
有些应用可能期望表达式在expression = NULLexpression求值为 null 时返回真。我们强烈建议此类应用修改为遵循 SQL 标准。但是,如果无法这样修改,那么可以使用配置变量transform_null_equals。如果将其打开,PostgreSQL会把x = NULL子句转换成x IS NULL。这是PostgreSQL 6.5 到 7.1 版本中的默认行为。
当任一输入为 null 时,普通的比较操作符会得到 null(表示“未知”)。进行比较的另一种方式是使用IS DISTINCT FROM结构:
expressionIS DISTINCT FROMexpression
对于非 null 输入,它和<>操作符一样。不过,如果两个输入都为 null,它会返回假。而如果只有一个输入为 null,它会返回真。因此,它实际上把 null 当作一种普通数据值,而不是“未知”。
expressionIS TRUEexpressionIS NOT TRUEexpressionIS FALSEexpressionIS NOT FALSEexpressionIS UNKNOWNexpressionIS NOT UNKNOWN
这些谓词总是返回真或假,从不返回空值,即使操作数为 null 也是如此。null 输入被当作逻辑值“未知”。请注意,IS UNKNOWN和IS NOT UNKNOWN实际上分别等同于IS NULL和IS NOT NULL,只是输入表达式必须是布尔类型。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。