跳到主要内容

比较运算符

seekdb 支持常用的比较运算符。

比较运算符概览

seekdb 当前版本所支持的比较运算符的详细信息如下表所示。

运算符操作数含义NULL 参与运算时的结果
=二元等于NULL
<=>二元安全等于详见下方说明
<> / !=二元不等于NULL
>二元大于NULL
>=二元大于等于NULL
<二元小于NULL
<=二元小于等于NULL
[NOT] IN二元是否在集合中详见下方说明
[NOT] BETWEEN AND三元是否在区间内详见下方说明
[NOT] LIKE三元字符串通配符匹配详见下方说明
IS [NOT] TRUE一元是否等于 TRUETRUEFALSE
IS [NOT] FALSE一元是否等于 FALSETRUEFALSE
IS [NOT] NULL一元是否等于 NULLTRUEFALSE

说明

比较运算的结果为 1 (TRUE)、0 (FALSE) 或 NULL。运算操作数适用于数字和字符串。根据需要,字符串会自动转换为数字,数字会自动转换为字符串。默认情况下,字符串比较不区分大小写并使用当前字符集。

以下为部分运算符的语法介绍以及当 NULL 参与运算时的结果说明。

<=>

对于安全等于 <=>,当 NULL 参与运算时,如果两个操作数均为 NULL,则返回 1;如果一个操作数为 NULL,则返回 0。示例如下:

SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL;
+---------+---------------+------------+
| 1 <=> 1 | NULL <=> NULL | 1 <=> NULL |
+---------+---------------+------------+
| 1 | 1 | 0 |
+---------+---------------+------------+
1 row in set (0.001 sec)

[NOT] IN

IN 语法如下:

expr IN (value,...)

NOT IN 语法等同于 NOT (expr IN (value,...))expr NOT IN (value,...)

对于 IN 运算,如果 expr 等于 value,... 列表中的任何值,则返回 1 (TRUE),否则返回 0 (FALSE)。当 exprNULL 时,结果为 NULL;当 expr 不为 NULL 且集合包含 NULL 时,如果集合中有非 NULL 值与 expr 相等,则结果为 TRUE,否则为 NULL

不建议在 value,... 列表中混合带引号和不带引号的值,由于带引号的值(例如字符串)和不带引号的值(例如数字)的比较规则不同,混合类型可能会导致不一致的结果。

示例如下:

SELECT 1 IN (1, NULL), 1 IN (2, NULL);
+----------------+----------------+
| 1 IN (1, NULL) | 1 IN (2, NULL) |
+----------------+----------------+
| 1 | NULL |
+----------------+----------------+
1 row in set (0.001 sec)

[NOT] BETWEEN AND

BETWEEN AND 语法如下:

expr BETWEEN min AND max

NOT BETWEEN AND 语法等同于 NOT (expr BETWEEN min AND max)expr NOT BETWEEN min AND max

对于 BETWEEN AND 运算,如果 expr 大于或等于 minexpr 小于或等于 max,则 BETWEEN 返回 1,否则返回 0。如果所有参数都为同类型,等效于表达式 (min <= expr AND expr <= max)

exprNULL,或者 minmax 都为 NULL 时,结果为 NULL。当 expr 不为 NULL,而且只有 minmaxNULL 时,如果只通过 exprmin/max 就能确定运算结果,则直接使用这个结果,否则返回 NULL

示例如下:

SELECT 1 BETWEEN 0 AND NULL, 1 BETWEEN 2 AND NULL;
+----------------------+----------------------+
| 1 BETWEEN 0 AND NULL | 1 BETWEEN 2 AND NULL |
+----------------------+----------------------+
| NULL | 0 |
+----------------------+----------------------+
1 row in set (0.001 sec)

[NOT] LIKE

LIKE 语法如下:

expr LIKE pat [ESCAPE 'escape_char']

NOT LIKE 语法等同于 NOT (expr LIKE pat [ESCAPE 'escape_char'])expr NOT LIKE pat [ESCAPE 'escape_char']

LIKE 用于字符串通配符匹配。结果返回 1 (TRUE) 或 0 (FALSE)。如果 exprpatNULL,则结果为 NULLESCAPE 用于定义转义符,如果 pat 中包含 escape_char,在匹配时 escape_char 后的字符将做为普通字符处理。

通配符包括如下两种:

  • %:匹配任意长度字符串。

  • _:匹配单个字符。

示例如下:

SELECT 'ab%' LIKE 'abc%' ESCAPE 'c';
+------------------------------+
| 'ab%' LIKE 'abc%' ESCAPE 'c' |
+------------------------------+
| 1 |
+------------------------------+
1 row in set (0.001 sec)