跳转至

比较函数和操作符

比较函数和操作符

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

比较操作符

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

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

比较操作符可以用于所有可以比较的数据类型。所有比较操作符都是双目操作符,它们返回boolean类型;类似于 1 < 2 < 3 的表达式是非法的(因为没有<操作符可以比较一个布尔值和3)。

比较谓词

如下所示,也有一些比较谓词。它们的行为和操作符很像,但是具有SQL标准所要求的特殊语法。

BETWEEN
语法
a BETWEEN x AND y
描述

xy之间

BETWEEN谓词可以简化范围测试:

a BETWEEN x AND y

等效于

a >= x AND a <= y
NOT BETWEEN
语法
a NOT BETWEEN x AND y
描述

不在xy之间

注意BETWEEN认为终点值是包含在范围内的。 NOT BETWEEN可以做相反比较:

a NOT BETWEEN x AND y

等效于

a < x OR a > y
BETWEEN SYMMETRIC
语法
a BETWEEN SYMMETRIC x AND y
描述
在对比较值排序后位于xy之间

BETWEEN SYMMETRICBETWEEN相似,不过BETWEEN SYMMETRIC不要求AND左边的参数小于或等于右边的参数。如果左参数不是小于等于右参数,这两个参数会自动被交换,这样总是会应用一个非空范围。

NOT BETWEEN SYMMETRIC
语法
a NOT BETWEEN SYMMETRIC x AND y
描述
在对比较值排序后不位于xy之间
IS DISTINCT FROM
语法
a IS DISTINCT FROM b
描述

不等于,空值被当做一个普通值

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

IS NOT DISTINCT FROM
语法
a IS NOT DISTINCT FROM b
描述

等于,空值被当做一个普通值

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

a IS DISTINCT FROM b
a IS NOT DISTINCT FROM b
IS NULL
语法
expression IS NULL
描述
是空值
IS NOT NULL
语法
expression IS NOT NULL
描述
不是空值
ISNULL
语法
expression ISNULL
描述
是空值(非标准语法)
NOTNULL
语法
expression NOTNULL
描述

不是空值(非标准语法)

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

expression IS NULL
expression IS NOT NULL

或者等效,但并不标准的谓词:

expression ISNULL
expression NOTNULL

不要expression =NULL,因为NULL是不“等于”NULL的(控制代表一个未知的值,因此我们无法知道两个未知的数值是否相等)。

IS TRUE
语法
boolean_expression IS TRUE
描述
为真
IS NOT TRUE
语法
boolean_expression IS NOT TRUE
描述
为假或未知
IS FALSE
语法
boolean_expression IS FALSE
描述
为假
IS NOT FALSE
语法
boolean_expression IS NOT FALSE
描述
为真或者未知
IS UNKNOWN
语法
boolean_expression IS UNKNOWN
描述
值为未知
IS NOT UNKNOWN
语法
boolean_expression IS NOT UNKNOWN
描述

为真或者为假

布尔值也可以使用下列谓词进行测试:

boolean_expression IS TRUE
boolean_expression IS NOT TRUE
boolean_expression IS FALSE
boolean_expression IS NOT FALSE
boolean_expression IS UNKNOWN
boolean_expression IS NOT UNKNOWN

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

比较函数

如下所示,也有一些比较相关的函数可用。

num_nonnulls()
语法
num_nonnulls(VARIADIC "any")
描述
返回非空参数的数量
示例
``` sql seaboxsql=# select num_nonnulls(1, NULL, 2); num_nonnulls
    2

(1 row) ```

num_nulls()
语法
num_nulls(VARIADIC "any")
描述
返回空参数的数量
示例
``` sql seaboxsql=# select num_nulls(1, NULL, 2); num_nulls
1

(1 row) ```