跳到主要内容

比较运算

Comparison Operators

下表展示了标准比较运算符。 当任一输入参数为 NULL 时,比较结果为 NULL

运算符说明示例结果
<小于2 < 3true
>大于2 > 3false
<=小于或等于2 <= 3true
>=大于或等于4 >= NULLNULL
= or ==等于NULL = NULLNULL
<> or !=不等于2 <> 2false

下表展示了标准的区分运算符。 这些运算符会将 NULL 视为相等。

运算符说明示例结果
IS DISTINCT FROM不相等(包含 NULL2 IS DISTINCT FROM NULLtrue
IS NOT DISTINCT FROM相等(包含 NULLNULL IS NOT DISTINCT FROM NULLtrue

Combination Casting

当比较不同类型时,Goose 会执行组合类型转换。 该转换机制是为了让交互式查询更方便,其行为与多种编程语言的转换规则一致,但通常与 PostgreSQL 的行为不兼容。例如,以下表达式在 Goose 中会成功计算并返回 true,但在 PostgreSQL 中会报错。

SELECT 1 = true;
SELECT 1 = '1.1';

Goose 的比较运算符无法强制启用更严格的类型检查。如果你需要更严格的类型检查,可考虑结合 typeof 函数创建 macro,或实现用户自定义函数

BETWEEN and IS [NOT] NULL

除标准比较运算符外,还有 BETWEENIS (NOT) NULL 运算符。它们在行为上类似普通运算符,但语法由 SQL 标准特别规定,如下表所示。

请注意,只有在 axy 三者类型相同的情况下,BETWEENNOT BETWEEN 才与下方示例等价,因为 BETWEEN 会将所有输入转换为同一类型。

谓词说明
a BETWEEN x AND y等价于 x <= a AND a <= y
a NOT BETWEEN x AND y等价于 x > a OR a > y
expression IS NULL若表达式为 NULL 则为 true,否则为 false
expression ISNULLIS NULL 的别名(非标准)
expression IS NOT NULL若表达式为 NULL 则为 false,否则为 true
expression NOTNULLIS NOT NULL 的别名(非标准)

对于表达式 BETWEEN x AND yx 是下界,y 是上界。因此若 x > y,结果始终为 false