PostgreSQL 9.3.4 文档 | ||||
---|---|---|---|---|
Prev | Up | Chapter 9. 函数和操作符 | Next |
常见的比较操作符都可用,如Table 9-1所示。
Note: !=操作符在分析器阶段被转换成<>。不能把!=和<>操作符实现为做不同的事。
比较操作符可以用于所有可以比较的数据类型。所有比较操作符都是双目操作符,它们返回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 SYMMETRIC和BETWEEN相同,不过BETWEEN SYMMETRIC不要求AND左边的参数小于或等于右边的参数。如果左参数不是小于等于右参数,这两个参数会自动被交换,这样总是会应用一个非空范围。
要检查一个值是否为空,使用下面的结构:
expression IS NULL expression IS NOT NULL
或者等效,但并不标准的结构:
expression ISNULL expression NOTNULL
不要写expression = NULL,因为NULL是不"等于"NULL的(控制代表一个未知的值,因此我们无法知道两个未知的数值是否相等)。这种行为符合 SQL 标准。
Tip: 有些应用可能要求表达式expression = NULL在expression得出空值时返回真。我们强烈建议这样的应用修改成遵循 SQL 标准。但是,如果这样修改不可能完成,那么我们可以使用配置变量transform_null_equals。如果打开它,PostgreSQL将把x = NULL子句转换成x IS NULL。
Note: 如果expression是行值,那么当行表达式本身为非空值或者行的所有域为非空时IS NULL为真。由于这种行为,IS NULL和IS 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 UNKNOWN和IS NOT UNKNOWN分别与IS NULL和IS NOT NULL相同, 只是输入表达式必须是布尔类型。