类别:

条件表达式函数

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。

另请参阅:

BOOLANDBOOLNOTBOOLOR

语法

BOOLXOR( <expr1> , <expr2> )
Copy

实参

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);
Copy
+---------------+----------------+---------------+------------------+------------------+---------------------+
| 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);
Copy
+-----------------+
| BOOLXOR(2, 0.3) |
|-----------------|
| True            |
+-----------------+
SELECT BOOLXOR(-0.4, 5);
Copy
+------------------+
| BOOLXOR(-0.4, 5) |
|------------------|
| True             |
+------------------+

同样,预期以下函数调用的结果应为 True,但实际返回 False

SELECT BOOLXOR(0, 0.3);
Copy
+-----------------+
| BOOLXOR(0, 0.3) |
|-----------------|
| False           |
+-----------------+
SELECT BOOLXOR(-0.4, 0);
Copy
+------------------+
| BOOLXOR(-0.4, 0) |
|------------------|
| False            |
+------------------+

如有需要,您可以使用 CEIL 函数来规避对正浮点数值的舍入行为。例如,以下查询会返回 False

SELECT BOOLXOR(2, CEIL(0.3));
Copy
+-----------------------+
| BOOLXOR(2, CEIL(0.3)) |
|-----------------------|
| False                 |
+-----------------------+

对于负浮点值,您可以使用 FLOOR 函数来解决这种舍入行为。例如,以下查询会返回 False

SELECT BOOLXOR(FLOOR(-0.4), 5);
Copy
+-------------------------+
| BOOLXOR(FLOOR(-0.4), 5) |
|-------------------------|
| False                   |
+-------------------------+
语言: 中文