Dans MariaDB, le NULLIF()
la fonction renvoie NULL
si ses deux arguments sont équivalents. Sinon, il renvoie le premier argument.
Syntaxe
La syntaxe ressemble à ceci :
NULLIF(expr1,expr2)
Exemple
Voici un exemple pour illustrer :
SELECT NULLIF( 5, 5 );
Résultat :
NULL
Dans ce cas, les deux arguments sont identiques et le résultat est donc NULL
.
Lorsque les arguments ne sont pas équivalents
Voici ce qui se passe lorsque les arguments ne sont pas équivalents :
SELECT NULLIF( 5, 3 );
Résultat :
5
Dans ce cas, le premier argument est renvoyé.
Chaînes
Voici un exemple qui compare des chaînes :
SELECT
NULLIF( 'Papaya', 'Papaya' ) AS "Same",
NULLIF( 'Papaya', 'Salad' ) AS "Different";
Résultat :
+------+-----------+| Idem | Différent |+------+-----------+| NUL | Papaye |+------+-----------+
Dates
Voici un exemple qui compare les dates :
SELECT
NULLIF( DATE '2000-10-30', DATE '2000-10-30' ) AS "Same",
NULLIF( DATE '2000-10-30', DATE '1999-10-30' ) AS "Different";
Résultat :
+------+------------+| Idem | Différent |+------+------------+| NUL | 2000-10-30 |+------+------------+
Expressions
NULLIF()
évalue la valeur actuelle des expressions. Par conséquent, si nous passons une expression comme celle-ci :
SELECT NULLIF( 10, 2 * 5 );
Nous obtenons ceci :
NULL
2 multiplié par 5 donne 10, donc les deux arguments sont équivalents.
Voici ce qui se passe si nous modifions le deuxième argument :
SELECT NULLIF( 10, 3 * 5 );
Résultat :
10
Le premier argument est renvoyé.
Un exemple de base de données
Supposons que nous lancions la requête suivante :
SELECT
Name,
LocalName
FROM country
ORDER BY Name ASC
LIMIT 10;
Résultat :
+---------------------+-----------------------+ | Nom | NomLocal |+---------------------+-----------------------+| Afghanistan | Afghanistan/Afqanestan || Albanie | Shqiperia || Algérie | Al-Jaza'ir/Algérie || Samoa américaines | Amérique Samoa || Andorre | Andorre || Angola | Angola || Anguilla | Anguilla || Antarctique | – || Antigua-et-Barbuda | Antigua-et-Barbuda || Argentine | Argentine |+---------------------+-----------------------+Ici, nous avons les noms de pays dans la colonne de gauche et le nom local du pays respectif dans la colonne de droite.
Ajoutons
NULLIF()
à une troisième colonne de notre requête :SELECT Name, LocalName, NULLIF(LocalName, Name) AS "Local Name Different" FROM country ORDER BY Name ASC LIMIT 10;
Résultat :
+---------------------+-----------------------+ ------------------------+| Nom | NomLocal | Nom local Différent |+---------------------+----------------------- +-----------------------+| Afghanistan | Afghanistan/Afghanistan | Afghanistan/Afqanestan || Albanie | Shqiperia | Shqiperia || Algérie | Al-Jaza'ir/Algérie | Al-Jaza'ir/Algérie || Samoa américaines | Amérique Samoa | Amérique Samoa || Andorre | Andorre | NUL || Angola | Angola | NUL || Anguilla | Anguilla | NUL || Antarctique | – | – || Antigua-et-Barbuda | Antigua-et-Barbuda | NUL || Argentine | Argentine | NULL |+---------------------+-----------------------+- ----------------------+Nous pouvons voir que la troisième colonne renvoie le nom local uniquement s'il est différent de la valeur dans le
Name
colonne. Si c'est la même chose, alorsNULL
est renvoyé.Nous pouvons également utiliser
NULLIF()
pour filtrer nos résultats de requête :SELECT Name, LocalName FROM country WHERE NULLIF(LocalName, Name) IS NOT NULL ORDER BY Name ASC LIMIT 10;
Résultat :
+----------------+-----------------------+| Nom | NomLocal |+----------------+-----------------------+| Afghanistan | Afghanistan/Afqanestan || Albanie | Shqiperia || Algérie | Al-Jaza'ir/Algérie || Samoa américaines | Amérique Samoa || Antarctique | – || Arménie | Hadjastan || Autriche | Autriche || Azerbaïdjan | Azärbaycan || Bahamas | Bahamas || Bahreïn | Al-Bahrayn |+----------------+-----------------------+Dans ce cas, nous avons renvoyé uniquement les lignes où le nom local est différent du
Name
colonne.
NULLIF()
vsCASE
Le code suivant :
NULLIF(expr1,expr2)
est équivalent au
CASE
suivant expression :CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END
Nombre de paramètres incorrect
Passer le mauvais nombre d'arguments, entraîne une erreur :
SELECT NULLIF( 10 );
Résultat :
ERREUR 1582 (42000) :Nombre de paramètres incorrect dans l'appel à la fonction native 'NULLIF'