Catégories :

Fonctions d’expressions conditionnelles

BOOLXOR

Calcule le booléen XOR de deux expressions numériques (c’est-à-dire que l’une des expressions, mais pas les deux, est true). Conformément à la sémantique booléenne :

  • Les valeurs différentes de zéro, y compris les nombres négatifs, sont considérées comme « true ».

  • Les valeurs égales à zéro sont considérées comme « false ».

En conséquence, la fonction renvoie :

  • True si une expression est différente de zéro et l’autre expression est zéro.

  • False si les deux expressions sont différentes de zéro ou les deux expressions sont zéro.

  • NULL si l’une ou les deux expressions sont NULL.

Voir aussi :

BOOLAND, BOOLNOT, BOOLOR

Syntaxe

BOOLXOR( <expr1> , <expr2> )
Copy

Arguments

expr1

Une expression numérique

expr2

Une expression numérique

Renvoie

Cette fonction renvoie une valeur de type BOOLEAN ou NULL.

Notes sur l’utilisation

Cette fonction arrondit les nombres à virgule flottante. Par conséquent, elle peut renvoyer des résultats inattendus lorsqu’elle arrondit les nombres à virgule flottante non nuls à zéro.

Pour des exemples de ce comportement et de solutions de contournement, voir Calcule les résultats XOR du booléen pour les nombres à virgule flottante.

Exemples

Les exemples suivants utilisent la fonction BOOLXOR.

Calcule les résultats XOR du booléen pour les entiers et les valeurs NULL

La requête suivante calcule les résultats XOR du booléen pour les entiers et les valeurs NULL :

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

Calcule les résultats XOR du booléen pour les nombres à virgule flottante

Les exemples suivants montrent comment la fonction peut renvoyer des résultats inattendus pour des nombres à virgule flottante qui s’arrondissent à zéro.

Pour les requêtes suivantes, un résultat False peut être attendu pour les appels de fonction suivants, mais ils renvoient True car la fonction arrondit les valeurs à virgule flottante non nulles à zéro :

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

De même, un résultat True peut être attendu pour les appels de fonction suivants, mais ils renvoient False :

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

Si nécessaire, vous pouvez contourner ce comportement d’arrondi pour les valeurs à virgule flottante positives en utilisant la fonction CEIL. Par exemple, la requête suivante renvoie False :

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

Pour les valeurs à virgule flottante négatives, vous pouvez contourner ce comportement d’arrondi en utilisant la fonction FLOOR. Par exemple, la requête suivante renvoie False :

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