在OceanBase中,逻辑操作符会把左右操作数都转成BOOL类型进行运算。逻辑运算时返回“Error”表示计算错误。
OceanBase各数据类型转换BOOL类型的规则如下:
INT | FLOAT | DOUBLE | TIMESTAMP | VARCHAR | BOOL | NULL |
True/False | True/False | True/False | Error | True/False/E | True/False | NULL |
Oceanbase>SELECT NOT 0, NOT 1, NOT NULL;
+-------+-------+----------+
| NOT 0 | NOT 1 | NOT NULL |
+-------+-------+----------+
| 1 | 0 | NULL |
+-------+-------+----------+
1 row in set (0.00 sec)
INT | FLOAT | DOUBLE | TIMESTAMP | VARCHAR | BOOL | NULL | |
INT | True/False | True/False | True/False | Error | True/False/Error | True/False | False/NULL |
FLOAT | True/False | True/False | Error | True/False/Error | True/False | False/NULL | |
DOUBLE | True/False | Error | True/False/Error | True/False | False/NULL | ||
TIMESTAMP | Error | Error | True/False | Error | |||
VARCHAR | True/False/Error | True/False/Error | False/NULL | ||||
BOOL | True/False | False/NULL | |||||
NULL | NULL |
Oceanbase>SELECT (0 AND 0), (0 AND 1), (1 AND 1), (1 AND NULL);
+-----------+-----------+-----------+--------------+
| (0 AND 0) | (0 AND 1) | (1 AND 1) | (1 AND NULL) |
+-----------+-----------+-----------+--------------+
| 0 | 0 | 1 | NULL |
+-----------+-----------+-----------+--------------+
1 row in set (0.00 sec)
INT | FLOAT | DOUBLE | TIMESTAMP | VARCHAR | BOOL | NULL | |
INT | True/False | True/False | True/False | Error | True/False/Error | True/False | True/NULL |
FLOAT | True/False | True/False | Error | True/False/Error | True/False | True/NULL | |
DOUBLE | True/False | Error | True/False/Error | True/False | True/NULL | ||
TIMESTAMP | Error | Error | Error | Error | |||
VARCHAR | True/False/Error | True/False/Error | True/NULL | ||||
BOOL | True/False | True/NULL | |||||
NULL | NULL |
Oceanbase>SELECT (0 OR 0), (0 OR 1), (1 OR 1), (1 AND NULL);
+----------+----------+----------+--------------+
| (0 OR 0) | (0 OR 1) | (1 OR 1) | (1 AND NULL) |
+----------+----------+----------+--------------+
| 0 | 1 | 1 | NULL |
+----------+----------+----------+--------------+
1 row in set (0.01 sec)
Mysql>SELECT 1 XOR TRUE, 1 XOR 1, 1 XOR 2, 1 XOR NULL, 1 XOR 1 XOR 1;
+------------+---------+---------+------------+---------------+
| 1 XOR TRUE | 1 XOR 1 | 1 XOR 2 | 1 XOR NULL | 1 XOR 1 XOR 1 |
+------------+---------+---------+------------+---------------+
| 0 | 0 | 0 | NULL | 1 |
+------------+---------+---------+------------+---------------+
1 row in set (0.01 sec)
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在OceanBase中,AND
是一个逻辑运算符,用于对两个布尔表达式进行逻辑与运算。如果两个操作数都为True
,结果才为True
;否则,结果为False
。在进行AND
运算时,OceanBase会先根据上述规则将操作数转换为布尔类型,然后执行逻辑运算。
逻辑运算符AND
的操作类型对照表可以这样理解: - 对于整型(INT)、浮点型(FLOAT、DOUBLE)、十进制型(DECIMAL)和时间戳(TIMESTAMP),非零值视为True
,零值视为False
。 - 字符串类型(VARCHAR),只有当字符串为“True”或“1”时视为True
,为“False”或“0”时视为False
,其他情况会报错。 - BOOL
类型的直接参与逻辑运算。 - NULL
值在逻辑运算中通常被视为特殊值,与任何值做AND
运算结果都是NULL
。
示例SQL查询展示AND
的用法:
Oceanbase> SELECT TRUE AND TRUE, TRUE AND FALSE, TRUE AND NULL, FALSE AND TRUE, FALSE AND FALSE, FALSE AND NULL, NULL AND TRUE, NULL AND FALSE, NULL AND NULL;
这个查询的结果将会是:
+------------------+------------------+---------------------+------------------+------------------+---------------------+---------------------+---------------------+---------------------+
| TRUE AND TRUE | TRUE AND FALSE | TRUE AND NULL | FALSE AND TRUE | FALSE AND FALSE | FALSE AND NULL | NULL AND TRUE | NULL AND FALSE | NULL AND NULL |
+------------------+------------------+---------------------+------------------+------------------+---------------------+---------------------+---------------------+---------------------+
| 1 | 0 | NULL | 0 | 0 | NULL | NULL | NULL | NULL |
+------------------+------------------+---------------------+------------------+------------------+---------------------+---------------------+---------------------+---------------------+
这里展示了AND
运算符如何根据操作数的布尔值来决定结果。注意,涉及到NULL
的操作结果均为NULL
,这是因为NULL
表示未知,无法确定逻辑真值,因此与任何值进行逻辑与运算结果都是未知(即NULL
)。