Dans MySQL, vous ne voulez parfois pas que les valeurs NULL soient renvoyées sous la forme NULL . Parfois, vous souhaitez que les valeurs NULL soient renvoyées avec une valeur différente, telle que "N/A", "Non applicable", "Aucun", ou même la chaîne vide "".
Heureusement, il existe plusieurs façons de le faire dans MySQL.
En voici quatre :
- Le
IFNULL()fonction - Le
COALESCE()fonction - Le
IF()fonction combinée avec leIS NULL(ouIS NOT NULL) opérateur - Le
CASEexpression combinée avec leIS NULL(ouIS NOT NULL) opérateur
Des exemples de ces options sont présentés ci-dessous.
Exemple de données
Tout d'abord, récupérons quelques exemples de données :
USE Solutions; SELECT TaskCode From Tasks;
Résultat :
+----------+ | TaskCode | +----------+ | gar123 | | NULL | | NULL | | dog456 | | NULL | | cat789 | +----------+
Nous avons donc trois valeurs NULL et trois valeurs non NULL.
La fonction IFNULL()
Étant donné son nom, c'est probablement l'option la plus évidente pour remplacer les valeurs NULL dans MySQL. Cette fonction est fondamentalement l'équivalent de ISNULL() dans SQL Server.
Le IFNULL() La fonction vous permet de fournir deux arguments. Le premier argument n'est renvoyé que s'il n'est pas NULL. S'il est NULL, le deuxième argument est renvoyé à la place.
Voici un exemple d'utilisation de IFNULL() par rapport à notre exemple d'ensemble de données :
SELECT IFNULL(TaskCode, 'N/A') AS Result FROM Tasks;
Résultat :
+--------+ | Result | +--------+ | gar123 | | N/A | | N/A | | dog456 | | N/A | | cat789 | +--------+
Ici, nous avons simplement remplacé les valeurs NULL par N/A .
La fonction COALESCE()
Cette fonction est similaire à IFNULL() fonction, mais légèrement différente. Cette fonction est conforme à la norme ANSI SQL et est largement déployée dans divers SGBDR .
La façon dont cela fonctionne est que vous fournissez autant d'arguments que nécessaire. COALESCE() renverra alors le premier non-NULL valeur dans la liste, ou NULL s'il n'y a pas de non-NULL valeurs.
Comme ceci :
SELECT COALESCE(TaskCode, 'N/A') AS Result FROM Tasks;
Résultat :
+--------+ | Result | +--------+ | gar123 | | N/A | | N/A | | dog456 | | N/A | | cat789 | +--------+
On obtient donc exactement le même résultat que précédemment.
Cependant, la différence avec cette fonction est que, comme mentionné, vous pouvez fournir une liste d'arguments. Le COALESCE() la fonction prendra la première valeur non NULL.
Ainsi, par exemple, nous pourrions ajouter NULL comme premier argument et placez None avant N/A et regardez ce qui se passe :
SELECT COALESCE(NULL, TaskCode, 'None', 'N/A') AS Result FROM Tasks;
Résultat :
+--------+ | Result | +--------+ | gar123 | | None | | None | | dog456 | | None | | cat789 | +--------+
Il a sauté le premier NULL comme prévu, il a ignoré toutes les valeurs NULL dans le TaskCode colonne, avant de s'installer sur None . Le N/A la valeur n'a pas été utilisée dans ce cas car None est venu en premier et c'est une valeur non NULL.
La fonction IF() combinée avec IS NULL/IS NOT NULL
Le IS NULL et IS NOT NULL les opérateurs vous permettent de tester les valeurs NULL et de présenter une valeur différente en fonction du résultat.
Nous pouvons utiliser ces opérateurs dans le IF() fonction, de sorte que les valeurs non NULL soient renvoyées et que les valeurs NULL soient remplacées par une valeur de notre choix.
Exemple :
SELECT IF(TaskCode IS NOT NULL, TaskCode, 'N/A') AS Result FROM Tasks;
Résultat :
+--------+ | Result | +--------+ | gar123 | | N/A | | N/A | | dog456 | | N/A | | cat789 | +--------+
Donc même résultat qu'avec le IFNULL() et COALESCE() fonctions.
Et bien sûr, nous pourrions échanger IS NOT NULL avec IS NULL . Si nous faisons cela, nous aurions également besoin d'échanger les arguments suivants :
SELECT IF(TaskCode IS NULL, 'N/A', TaskCode) AS Result FROM Tasks;
L'expression CASE combinée avec IS NULL/IS NOT NULL
Une autre façon de procéder consiste à utiliser le CASE expression :
SELECT
CASE
WHEN TaskCode IS NOT NULL THEN TaskCode
ELSE 'N/A'
END AS Result
FROM Tasks;
Résultat :
+--------+ | Result | +--------+ | gar123 | | N/A | | N/A | | dog456 | | N/A | | cat789 | +--------+
Comme dans l'exemple précédent, cela pourrait être réécrit pour utiliser IS NULL au lieu de IS NOT NULL :
SELECT
CASE
WHEN TaskCode IS NULL THEN 'N/A'
ELSE TaskCode
END AS Result
FROM Tasks;