MariaDB
 sql >> Base de données >  >> RDS >> MariaDB

MariaDB NULLIF() expliqué

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, alors NULL 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() vs CASE

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'