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
CASE
expression 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;