Mysql
 sql >> Database >  >> RDS >> Mysql

4 modi per sostituire NULL con un valore diverso in MySQL

In MySQL, a volte non vuoi che i valori NULL vengano restituiti come NULL . A volte si desidera che i valori NULL vengano restituiti con un valore diverso, ad esempio "N/D", "Non applicabile", "Nessuno" o anche la stringa vuota "".

Fortunatamente ci sono diversi modi per farlo in MySQL.

Eccone quattro:

  • Il IFNULL() funzione
  • Il COALESCE() funzione
  • Il IF() funzione combinata con IS NULL (o IS NOT NULL ) operatore
  • Il CASE espressione combinata con IS NULL (o IS NOT NULL ) operatore

Di seguito sono riportati esempi di queste opzioni.

Dati di esempio

Per prima cosa, prendiamo alcuni dati di esempio:

USE Solutions;
SELECT TaskCode
From Tasks;

Risultato:

+----------+
| TaskCode |
+----------+
| gar123   |
| NULL     |
| NULL     |
| dog456   |
| NULL     |
| cat789   |
+----------+

Quindi abbiamo tre valori NULL e tre valori non NULL.

La funzione IFNULL()

Dato il suo nome, questa è probabilmente l'opzione più ovvia per sostituire i valori NULL in MySQL. Questa funzione è sostanzialmente l'equivalente di ISNULL() in SQL Server.

Il IFNULL() La funzione consente di fornire due argomenti. Il primo argomento viene restituito solo se non è NULL. Se è NULL, viene invece restituito il secondo argomento.

Ecco un esempio di utilizzo di IFNULL() rispetto al nostro set di dati di esempio:

SELECT IFNULL(TaskCode, 'N/A') AS Result 
FROM Tasks;

Risultato:

+--------+
| Result |
+--------+
| gar123 |
| N/A    |
| N/A    |
| dog456 |
| N/A    |
| cat789 |
+--------+

Qui, abbiamo semplicemente sostituito i valori NULL con N/A .

La funzione COALESCE()

Questa funzione è simile a IFNULL() funzione, ma leggermente diversa. Questa funzione aderisce allo standard ANSI  SQL ed è ampiamente distribuita in vari RDBMS .

Il modo in cui funziona è che fornisci tutti gli argomenti di cui hai bisogno. COALESCE() restituirà quindi il primo non NULL valore nell'elenco o NULL se non sono presenti NULL valori.

In questo modo:

SELECT COALESCE(TaskCode, 'N/A') AS Result 
FROM Tasks;

Risultato:

+--------+
| Result |
+--------+
| gar123 |
| N/A    |
| N/A    |
| dog456 |
| N/A    |
| cat789 |
+--------+

Quindi otteniamo esattamente lo stesso risultato di prima.

Tuttavia, la differenza con questa funzione è che, come accennato, puoi fornire un elenco di argomenti. Il COALESCE() la funzione prenderà qualunque sia il primo valore non NULL.

Quindi, ad esempio, potremmo aggiungere NULL come primo argomento e posizionare None prima di N/A e guarda cosa succede:

SELECT COALESCE(NULL, TaskCode, 'None', 'N/A') AS Result 
FROM Tasks;

Risultato:

+--------+
| Result |
+--------+
| gar123 |
| None   |
| None   |
| dog456 |
| None   |
| cat789 |
+--------+

Ha saltato il primo NULL come previsto, ha saltato tutti i valori NULL nel TaskCode colonna, prima di scegliere None . Il N/A value non è stato utilizzato in questo caso perché None è arrivato per primo ed è un valore non NULL.

La funzione IF() combinata con IS NULL/IS NOT NULL

Il IS NULL e IS NOT NULL gli operatori consentono di verificare i valori NULL e di presentare un valore diverso a seconda del risultato.

Possiamo usare questi operatori all'interno di IF() funzione, in modo che vengano restituiti valori non NULL e i valori NULL vengano sostituiti con un valore a nostra scelta.

Esempio:

SELECT IF(TaskCode IS NOT NULL, TaskCode, 'N/A') AS Result 
FROM Tasks;

Risultato:

+--------+
| Result |
+--------+
| gar123 |
| N/A    |
| N/A    |
| dog456 |
| N/A    |
| cat789 |
+--------+

Quindi lo stesso risultato di IFNULL() e COALESCE() funzioni.

E, naturalmente, potremmo scambiare IS NOT NULL con IS NULL . Se lo facciamo, dovremmo scambiare anche gli argomenti successivi:

SELECT IF(TaskCode IS NULL, 'N/A', TaskCode) AS Result 
FROM Tasks;

L'espressione CASE combinata con IS NULL/IS NOT NULL

Un altro modo per farlo è utilizzare il CASE espressione:

SELECT 
    CASE 
        WHEN TaskCode IS NOT NULL THEN TaskCode 
        ELSE 'N/A' 
    END AS Result
FROM Tasks;

Risultato:

+--------+
| Result |
+--------+
| gar123 |
| N/A    |
| N/A    |
| dog456 |
| N/A    |
| cat789 |
+--------+

Come con l'esempio precedente, questo potrebbe essere riscritto per usare IS NULL invece di IS NOT NULL :

SELECT 
    CASE 
        WHEN TaskCode IS NULL THEN 'N/A' 
        ELSE TaskCode 
    END AS Result
FROM Tasks;