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

4 façons de remplacer NULL par une valeur différente dans MySQL

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 le IS NULL (ou IS NOT NULL ) opérateur
  • Le CASE expression combinée avec le IS NULL (ou IS 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;