カテゴリ:

条件式関数

BOOLXOR

2つの数値式のブール値 XOR を計算します。つまり両方の式ではなく、一方の式がtrueになります。次のブールセマンティクスに従います。

  • ゼロ以外の値(負の数を含む)はtrueと見なされます。

  • ゼロ値はfalseと見なされます。

結果として、関数は以下を返します。

  • True 、一方の式がゼロ以外で、もう一方の式がゼロの場合。

  • False 、両方の式がゼロ以外の場合、または両方の式がゼロの場合。

  • NULL 、一方または両方の式が NULLの場合。

こちらもご参照ください。

BOOLAND 、 BOOLNOT 、 BOOLOR

構文

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                   |
+-------------------------+