- 类别:
BOOLXOR¶
Computes the Boolean XOR of two numeric expressions; that is, one of the expressions, but not both expressions, is true. In accordance with Boolean semantics:
Non-zero values, including negative numbers, are regarded as true.
Zero values are regarded as false.
因此,该函数返回:
True,如果一个表达式为非零,而另一个表达式为零。False,如果两个表达式都为非零或两个表达式均为零。NULL,如果一个或两个表达式都是 NULL。
语法¶
BOOLXOR( <expr1> , <expr2> )
实参¶
expr1数值表达式。
expr2数值表达式。
返回¶
此函数返回 BOOLEAN 类型的值或 NULL。
使用说明¶
此函数对 浮点数 进行四舍五入。因此,当它将非零浮点数舍入为零时,可能会返回意外结果。
有关此行为和替代方案的示例,请参阅 计算浮点数的布尔 XOR 结果。
示例¶
以下示例使用 BOOLXOR 函数。
计算整数和 NULL 值的布尔 XOR 结果¶
以下查询计算整数和 NULL 值的布尔 XOR 结果:
SELECT BOOLXOR(2, 0),
BOOLXOR(1, -1),
BOOLXOR(0, 0),
BOOLXOR(NULL, 3),
BOOLXOR(NULL, 0),
BOOLXOR(NULL, NULL);
+---------------+----------------+---------------+------------------+------------------+---------------------+
| BOOLXOR(2, 0) | BOOLXOR(1, -1) | BOOLXOR(0, 0) | BOOLXOR(NULL, 3) | BOOLXOR(NULL, 0) | BOOLXOR(NULL, NULL) |
|---------------+----------------+---------------+------------------+------------------+---------------------|
| True | False | False | NULL | NULL | NULL |
+---------------+----------------+---------------+------------------+------------------+---------------------+
计算浮点数的布尔 XOR 结果¶
以下示例演示了该函数如何为舍入为零的浮点数返回意外结果。
对于以下查询,预期以下函数调用的结果应为 False,但由于该函数会将非零浮点数值舍入为零,因此实际返回 True:
SELECT BOOLXOR(2, 0.3);
+-----------------+
| BOOLXOR(2, 0.3) |
|-----------------|
| True |
+-----------------+
SELECT BOOLXOR(-0.4, 5);
+------------------+
| BOOLXOR(-0.4, 5) |
|------------------|
| True |
+------------------+
同样,预期以下函数调用的结果应为 True,但实际返回 False:
SELECT BOOLXOR(0, 0.3);
+-----------------+
| BOOLXOR(0, 0.3) |
|-----------------|
| False |
+-----------------+
SELECT BOOLXOR(-0.4, 0);
+------------------+
| BOOLXOR(-0.4, 0) |
|------------------|
| False |
+------------------+
如有需要,您可以使用 CEIL 函数来规避对正浮点数值的舍入行为。例如,以下查询会返回 False:
SELECT BOOLXOR(2, CEIL(0.3));
+-----------------------+
| BOOLXOR(2, CEIL(0.3)) |
|-----------------------|
| False |
+-----------------------+
对于负浮点值,您可以使用 FLOOR 函数来解决这种舍入行为。例如,以下查询会返回 False:
SELECT BOOLXOR(FLOOR(-0.4), 5);
+-------------------------+
| BOOLXOR(FLOOR(-0.4), 5) |
|-------------------------|
| False |
+-------------------------+