比较函数和操作符
比较函数和操作符¶
常见的比较操作符都可用,如下所示。
比较操作符¶
操作符 | 描述 |
---|---|
< |
小于 |
> |
大于 |
>= |
大于等于 |
<= |
小于等于 |
= |
等于 |
<> or != |
不等于 |
注意:!=
操作符在分析器阶段被转换成<>
。不能把!=
和<>
操作符实现为做不同的事。
比较操作符可以用于所有可以比较的数据类型。所有比较操作符都是双目操作符,它们返回boolean
类型;类似于 1 < 2 < 3
的表达式是非法的(因为没有<
操作符可以比较一个布尔值和3
)。
比较谓词¶
如下所示,也有一些比较谓词。它们的行为和操作符很像,但是具有SQL标准所要求的特殊语法。
BETWEEN¶
- 语法
a BETWEEN x AND y
- 描述
-
在x和y之间
BETWEEN
谓词可以简化范围测试:a BETWEEN x AND y
等效于
a >= x AND a <= y
NOT BETWEEN¶
- 语法
a NOT BETWEEN x AND y
- 描述
-
不在x和y之间
注意
BETWEEN
认为终点值是包含在范围内的。NOT BETWEEN
可以做相反比较:a NOT BETWEEN x AND y
等效于
a < x OR a > y
BETWEEN SYMMETRIC¶
- 语法
a BETWEEN SYMMETRIC x AND y
- 描述
- 在对比较值排序后位于x和y之间
BETWEEN SYMMETRIC
和BETWEEN
相似,不过BETWEEN SYMMETRIC
不要求AND
左边的参数小于或等于右边的参数。如果左参数不是小于等于右参数,这两个参数会自动被交换,这样总是会应用一个非空范围。
NOT BETWEEN SYMMETRIC¶
- 语法
a NOT BETWEEN SYMMETRIC x AND y
- 描述
- 在对比较值排序后不位于x和y之间
IS DISTINCT FROM¶
- 语法
a
IS DISTINCT FROMb
- 描述
-
不等于,空值被当做一个普通值
对于非空输入,
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 UNKNOWN
和IS NOT UNKNOWN
分别与IS NULL
和IS 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) ```