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

Comment NVL() fonctionne dans MariaDB

Depuis MariaDB 10.3, NVL() peut être utilisé comme alias pour le IFNULL() une fonction. Par conséquent, les deux fonctions nous permettent de remplacer les valeurs NULL par une autre valeur.

Syntaxe

NVL(expr1,expr2)

Si expr1 n'est pas NULL , NVL() renvoie expr1 ; sinon il renvoie expr2 .

Étant donné NVL() est un alias pour IFNULL() , nous pouvons également utiliser la syntaxe suivante :

IFNULL(expr1,expr2)

Les deux syntaxes ci-dessus renvoient le même résultat.

Exemple

Voici un exemple de base qui utilise le NULL constante :

SELECT NVL( null, 'No Value' );

Résultat :

No Value

Dans ce cas, j'ai utilisé NVL() pour remplacer la valeur NULL par No Value .

Voici ce qui se passe lorsque le premier argument n'est pas NULL :

SELECT NVL( 'Spicy', 'No Value' );

Résultat :

Green

Dans ce cas, le premier argument est renvoyé, car il n'est pas NULL .

Exemple de base de données

Supposons que nous lancions la requête suivante :

SELECT * FROM Employees;

Résultat :

empId	name	dept
-----   -----   -----
1	Jess	Sales
2	Rohit	NULL
3	Zohan	Sales
4	Homer	NULL

Nous pouvons voir que deux lignes ont des valeurs NULL dans le dept colonne.

Dans la requête suivante, nous utilisons NVL() pour remplacer les valeurs NULL par une valeur plus significative pour le lecteur :

SELECT
    empId,
    name,
    NVL( dept, 'Not yet assigned' ) AS dept
FROM Employees;

Résultat :

empId	name	dept
-----   -----   ----------------
1	Jess	Sales
2	Rohit	Not yet assigned
3	Zohan	Sales
4	Homer	Not yet assigned

Expressions

La valeur actuelle du premier argument est évaluée. Par conséquent, si nous fournissons une expression comme celle-ci :

SELECT NVL( 4 * 10, 0 );

Nous obtenons ceci :

40

Donc, nous n'obtenons pas le 4 * 10 partie. Nous obtenons le résultat de cette expression (qui dans ce cas est 40 ).

Il en va de même lorsque le résultat de l'expression est NULL :

SELECT NVL( 4 / 0, 0 );

Résultat :

0.0000

Cependant, c'est un exemple dangereux. Zéro est une valeur. NULL n'est pas.

Retourner zéro lorsqu'il y a une valeur NULL peut être trompeur ou même complètement faux. Imaginez si nous avions affaire à des prix. Nous pourrions nous retrouver avec un prix de zéro, ce qui pourrait être incorrect et coûter très cher à l'entreprise.

Dans de tels cas, il est généralement préférable d'utiliser une valeur plus significative qui indique au lecteur qu'il n'y a pas de valeur.

Exemple :

SELECT NVL( 4 / 0, 'No value' );

Résultat :

No Value

Le IFNULL() Fonction

Comme mentionné, NVL() est un alias pour IFNULL() . Par conséquent, nous pouvons remplacer NVL() avec IFNULL() dans l'un des exemples ci-dessus.

Exemple :

SELECT IFNULL( 4 / 0, 'No value' );

Résultat :

No Value