更新时间:2019-10-24 17:49
运算符 | 描述 | 例子 |
---|---|---|
AND | a和b两者都为true则返回True | a AND b |
OR | a或b有一个为true就返回True | a OR b |
NOT | a为false则返回True | NOT a |
当运算符 AND 的输入中包含 FALSE 时必然返回 FALSE, 否则如果输入中包含了 NULL ,则会返回 NULL:
SELECT CAST(null AS boolean) AND true; -- null
SELECT CAST(null AS boolean) AND false; -- false
SELECT CAST(null AS boolean) AND CAST(null AS boolean); -- null
当运算符 OR 的输入中包含 TRUE 时必然返回 TRUE, 否则如果输入中包含了 NULL,则会返回 NULL:
SELECT CAST(null AS boolean) OR CAST(null AS boolean); -- null
SELECT CAST(null AS boolean) OR false; -- null
SELECT CAST(null AS boolean) OR true; -- true
下表详细列举了 NULL 参与 AND 和 OR 逻辑运算的结果:
a | b | a AND b | a OR b |
---|---|---|---|
TRUE | TRUE | TRUE | TRUE |
TRUE | FALSE | FALSE | TRUE |
TRUE | NULL | NULL | TRUE |
FALSE | TRUE | FALSE | TRUE |
FALSE | FALSE | FALSE | FALSE |
FALSE | NULL | FALSE | NULL |
NULL | TRUE | NULL | TRUE |
NULL | FALSE | FALSE | NULL |
NULL | NULL | NULL | NULL |
NOT 运算符在 NULL 上的操作实例如下:
SELECT NOT CAST(null AS boolean); -- null
下表详细列举了 NULL 参与 NOT 逻辑运算的结果:
a | NOT a |
---|---|
TRUE | FALSE |
FALSE | TRUE |
NULL | NULL |
运算符 | 描述 |
---|---|
< | 小于 |
> | 大于 |
<= | 小于等于 |
>= | 大于等于 |
= | 等于 |
<> | 不等于 |
!= | 不等于 (非标准语法) |
BETWEEN 运算符用来判断值是否在区间里, 使用语法固定为 value BETWEEN min AND max
:
SELECT 3 BETWEEN 2 AND 6;
上例中的查询语句等同于:
SELECT 3 >= 2 AND 3 <= 6;
判断值是否在区间外可以使用 NOT BETWEEN
:
SELECT 3 NOT BETWEEN 2 AND 6;
上例中的查询语句等同于:
SELECT 3 < 2 OR 3 > 6;
在 BETWEEN
or NOT BETWEEN
运算符中出现 NULL 都会使结果为 NULL:
SELECT NULL BETWEEN 2 AND 4; -- null
SELECT 2 BETWEEN NULL AND 6; -- null
BETWEEN
and NOT BETWEEN
运算符同样可以作用于字符串型数据判断:
SELECT 'Paul' BETWEEN 'John' AND 'Ringo'; -- true
必须注意的是,BETWEEN
and NOT BETWEEN
运算符的输入数据类型必须相同。例如,判断 ‘John’ is between 2.3 and 35.2 会使数据库报错。
IS NULL
and IS NOT NULL
运算符用于测试值是否为NULL(未定义)。这两个运算符对所有数据类型有效。
用 IS NULL
判断 NULL
值会返回 TRUE
:
select NULL IS NULL; -- true
但是其他任务非 NULL
值都会返回 FALSE
:
SELECT 3.0 IS NULL; -- false
在SQL语义中 NULL
代表一个未知的值,所以任何比较运算符在接收 NULL
输入时都会返回 NULL
。 IS DISTINCT FROM
和 IS NOT DISTINCT FROM
运算符会把 NULL
当成特殊的值, 当这两个运算符的输入中包含 NULL
时,它们仍然会返回True或者False:
SELECT NULL IS DISTINCT FROM NULL; -- false
SELECT NULL IS NOT DISTINCT FROM NULL; -- true
在上面的例子中, 两个 NULL
值被认为是重复的。当你的比较运算数据中可能包含 NULL
值时,你可以使用这两个运算符来确保获得 TRUE
或者 FALSE
结果。
下表详细列举了 NULL
参与比较运算符时产生的结果:
a | b | a = b | a <> b | a DISTINCT b | a NOT DISTINCT b |
---|---|---|---|---|---|
1 | 1 | TRUE | FALSE | FALSE | TRUE |
1 | 2 | FALSE | TRUE | TRUE | FALSE |
1 | NULL | NULL | NULL | TRUE | FALSE |
NULL | NULL | NULL | NULL | FALSE | TRUE |
这两个函数不在标准的SQL语法中,但都是很常见的扩展。 和其他比较运算符一样,当函数的输入中出现 NULL
时函数返回结果为 NULL
。 注意!在一些其他数据库,例如 PostgreSQL 中,只有当输入全部为 NULL
时才返回 NULL
。
比较函数支持以下数据类型: DOUBLE, BIGINT, VARCHAR, TIMESTAMP, TIMESTAMP WITH TIME ZONE, DATE
greatest(value1, value2) → [same as input]
返回参数中的最大值。
least(value1, value2) → [same as input]
返回参数中的最小值。
ALL
, ANY
and SOME
量词可以和比较运算符结合使用:
expression operator quantifier ( subquery )
例如:
SELECT 'hello' = ANY (VALUES 'hello', 'world'); -- true
SELECT 21 < ALL (VALUES 19, 20, 21); -- false
SELECT 42 >= SOME (SELECT 41 UNION ALL SELECT 42 UNION ALL SELECT 43); -- true
下表列举了比较运算符和量词组合的一些含义:
表达式 | 含义 |
---|---|
A = ALL (…) | 返回 true 当 A 等于所有匹配数据时. |
A <> ALL (…) | 返回 true 当 A 不等于所有匹配数据时. |
A < ALL (…) | 返回 true 当 A 小于所有匹配数据时. |
A = ANY (…) | 返回 true 当 A 等于任意某个匹配数据. 语义和 A IN (…) 相同. |
A <> ANY (…) | 返回 true 当 A 不等于任意某个匹配数据. |
A < ANY (…) | 返回 true 当 A 小于任意某个匹配数据. |
ANY
和 SOME
含义相同,可以互换使用。
运算符 ||
完成字符串连接操作.
运算符 | 描述 |
---|---|
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 (整形除法会截断) |
% | 模数 (余数) |
运算符 | 示例 | 结果 |
---|---|---|
+ | date ‘2012-08-08’ + interval ‘2’ day | 2012-08-10 |
+ | time ‘01:00’ + interval ‘3’ hour | 04:00:00.000 |
+ | timestamp ‘2012-08-08 01:00’ + interval ‘29’ hour | 2012-08-09 06:00:00.000 |
+ | timestamp ‘2012-10-31 01:00’ + interval ‘1’ month | 2012-11-30 01:00:00.000 |
+ | interval ‘2’ day + interval ‘3’ hour | 2 03:00:00.000 |
+ | interval ‘3’ year + interval ‘5’ month | 3-5 |
- | date ‘2012-08-08’ - interval ‘2’ day | 2012-08-06 |
- | time ‘01:00’ - interval ‘3’ hour | 22:00:00.000 |
- | timestamp ‘2012-08-08 01:00’ - interval ‘29’ hour | 2012-08-06 20:00:00.000 |
- | timestamp ‘2012-10-31 01:00’ - interval ‘1’ month | 2012-09-30 01:00:00.000 |
- | interval ‘2’ day - interval ‘3’ hour | 1 21:00:00.000 |
- | interval ‘3’ year - interval ‘5’ month | 2-7 |
[] 操作符用来获取数组的某个元素:
SELECT my_array[1] AS first_element
|| 操作符可以将相同类型的数组或元素连接:
SELECT ARRAY [1] || ARRAY [2]; -- [1, 2]
SELECT ARRAY [1] || 2; -- [1, 2]
SELECT 2 || ARRAY [1]; -- [2, 1]
[] 运算符用于取出map中指定键的值:
SELECT name_to_age_map['Bob'] AS bob_age;
在文档使用中是否遇到以下问题
更多建议
匿名提交