开发者社区 问答 正文

OceanBase的逻辑运算符

在OceanBase中,逻辑操作符会把左右操作数都转成BOOL类型进行运算。逻辑运算时返回“Error”表示计算错误。
OceanBase各数据类型转换BOOL类型的规则如下:


  • 字符串只有是“True”、“False”、“1”和“0”才能够转换到BOOL类型,其中字符串“True”和“1”为“True”,字符串“False”和“0”为“False”。

  • “INT”、“FLOAT”、“DOUBLE”和“DECIMAL”转换BOOL类型时,数值不为零时为“True”,数值为零时为“False”。


NOT !


逻辑非,操作类型对照表如下。
INTFLOATDOUBLETIMESTAMPVARCHARBOOLNULL
True/FalseTrue/FalseTrue/FalseErrorTrue/False/ETrue/FalseNULL


Oceanbase>SELECT NOT 0, NOT 1, NOT NULL;
+-------+-------+----------+
| NOT 0 | NOT 1 | NOT NULL |
+-------+-------+----------+
|     1 |     0 |     NULL |
+-------+-------+----------+
1 row in set (0.00 sec)


AND &&



逻辑与,操作类型对照表如下。
INTFLOATDOUBLETIMESTAMPVARCHARBOOLNULL
INTTrue/FalseTrue/FalseTrue/FalseErrorTrue/False/ErrorTrue/FalseFalse/NULL
FLOATTrue/FalseTrue/FalseErrorTrue/False/ErrorTrue/FalseFalse/NULL
DOUBLETrue/FalseErrorTrue/False/ErrorTrue/FalseFalse/NULL
TIMESTAMPErrorErrorTrue/FalseError
VARCHARTrue/False/ErrorTrue/False/ErrorFalse/NULL
BOOLTrue/FalseFalse/NULL
NULLNULL


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)


OR ||



逻辑或,操作类型对照表如下。
INTFLOATDOUBLETIMESTAMPVARCHARBOOLNULL
INTTrue/FalseTrue/FalseTrue/FalseErrorTrue/False/ErrorTrue/FalseTrue/NULL
FLOATTrue/FalseTrue/FalseErrorTrue/False/ErrorTrue/FalseTrue/NULL
DOUBLETrue/FalseErrorTrue/False/ErrorTrue/FalseTrue/NULL
TIMESTAMPErrorErrorErrorError
VARCHARTrue/False/ErrorTrue/False/ErrorTrue/NULL
BOOLTrue/FalseTrue/NULL
NULLNULL


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)


XOR(暂不支持)



逻辑异或。当任意一个操作数为NULL时,返回值为NULL。对于非NULL的操作数,假如有奇数个操作数为非零值,则计算所得结果为1,否则为0。 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)



展开
收起
云栖大讲堂 2017-11-01 14:28:45 1712 分享 版权
阿里云 AI 助理回答

在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)。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答