9.3 9.4 9.5 9.6 10 11 12 13 14 Current(15)
阿里云PostgreSQL 问题报告 纠错本页面
PostgreSQL 9.5.3 中文手册
上一页上一级章 9. 函数和操作符下一页

9.2. 比较操作符

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

表 9-1. 比较操作符

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

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

比较操作符可以用于所有可以比较的数据类型。所有比较操作符都是双目操作符,它们返回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相同,不过BETWEEN SYMMETRIC不要求AND左边的参数小于或等于右边的参数。如果左参数不是小于等于右参数,这两个参数会自动被交换,这样总是会应用一个非空范围。

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

expression IS NULL
expression IS NOT NULL

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

expression ISNULL
expression NOTNULL

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

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

注意: 如果expression是行值,那么当行表达式本身为非空值或者行的所有域为非空时IS NULL为真。由于这种行为,IS NULLIS NOT NULL并不总是为行值表达式返回反转的结果,即一个同时包含 NULL 和非空值的行值表达式将会对两种测试都返回假。这种定义符合 SQL 标准,它是一个对PostgreSQL 8.2之前版本中的不一致行为的修改。

当任何一个输入为空时,普通比较操作符得到空值(代表"未知"),不是真也不是假。例如,7 = NULL得到空,7 <> NULL也一样。当这种行为不合适时,使用IS [ NOT ] DISTINCT FROM结构:

expression IS DISTINCT FROM expression
expression IS NOT DISTINCT FROM expression

对于非空输入,IS DISTINCT FROM<>操作符相同。但是,假如两个输入都是空,那么它将返回假,而如果只有一个输入是空,那么它将返回真。相似地,对于非空输入IS NOT DISTINCT FROM=是一样的,但是它在两个输入为空时返回真,只有一个输入为空是返回假。所以,这些结构实际上表现得似乎空值是一个普通数据值,而不是"未知"

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

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相同, 只是输入表达式必须是布尔类型。


上一页起始页下一页
逻辑操作符上一级数学函数和操作符
<
/BODY>

AltStyle によって変換されたページ (->オリジナル) /