카테고리:

조건식 함수

BOOLXOR

두 숫자 표현식의 부울 XOR를 계산합니다. 즉, 부울 의미 체계에 따라 두 표현식 모두가 아니라 그중 하나가 true입니다.

  • 0이 아닌 값(음수 포함)은 True로 간주됩니다.

  • 0 값은 False로 간주됩니다.

결과적으로 함수는 다음을 반환합니다.

  • 한 식이 0이 아니고 다른 식은 0인 경우 True.

  • 두 식이 모두 0이 아니거나 두 식이 모두 0인 경우 False.

  • 식 하나 또는 둘 모두가 NULL인 경우 NULL.

참고 항목:

BOOLAND , BOOLNOT , BOOLOR

구문

BOOLXOR( <expr1> , <expr2> )
Copy

인자

expr1

숫자 식입니다.

expr2

숫자 식입니다.

반환

이 함수는 BOOLEAN 타입 또는 NULL 값을 반환합니다.

사용법 노트

이 함수는 :ref:`부동 소수점 숫자<label-data_types_for_floating_point_numbers>`를 반올림합니다. 따라서 0이 아닌 부동 소수점 숫자를 0으로 반올림할 때 예기치 않은 결과를 반환할 수 있습니다.

이 동작과 해결 방법의 예는 부동 소수점 숫자에 대한 부울 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 결과 계산

다음 예에서는 함수가 0으로 반올림되는 부동 소수점 숫자에 대해 예기치 않은 결과를 반환하는 방법을 보여줍니다.

다음 쿼리의 경우 :code:`False`의 결과는 다음 함수 호출에 대해 예상될 수 있지만, 이 함수가 0이 아닌 부동 소수점 값을 0으로 반올림하기 때문에 :code:`True`를 반환합니다.

SELECT BOOLXOR(2, 0.3);
Copy
+-----------------+
| BOOLXOR(2, 0.3) |
|-----------------|
| True            |
+-----------------+
SELECT BOOLXOR(-0.4, 5);
Copy
+------------------+
| BOOLXOR(-0.4, 5) |
|------------------|
| True             |
+------------------+

마찬가지로 다음 함수 호출에 대해 True 결과가 예상될 수 있지만, :code:`False`이 반환됩니다.

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

필요한 경우 CEIL 함수를 사용하여 양수 부동 소수점 값에 대한 이 반올림 동작을 해결할 수 있습니다. 예를 들어, 다음 쿼리는 :code:`False`를 반환합니다.

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

음수 부동 소수점 값의 경우 FLOOR 함수를 사용하여 이 반올림 동작을 해결할 수 있습니다. 예를 들어, 다음 쿼리는 :code:`False`를 반환합니다.

SELECT BOOLXOR(FLOOR(-0.4), 5);
Copy
+-------------------------+
| BOOLXOR(FLOOR(-0.4), 5) |
|-------------------------|
| False                   |
+-------------------------+