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

Spiegazione di MySQL IFNULL()

MySQL ha un IFNULL() funzione che ci consente di sostituire facilmente i valori NULL con un altro valore.

Sintassi

IFNULL(expr1,expr2)

Se expr1 non è NULL , IFNULL() restituisce expr1 ; altrimenti restituisce expr2 .

Esempio

Ecco un esempio di base che utilizza NULL costante:

SELECT IFNULL( null, 'n/a' );

Risultato:

n/a

In questo caso, ho usato IFNULL() per sostituire il valore NULL con la stringa n/a .

Ecco cosa succede quando il primo argomento non è NULL :

SELECT IFNULL( 'Cow', 'n/a' );

Risultato:

Cow

In questo caso, viene restituito il primo argomento, perché non è NULL .

Esempio di database

Supponiamo di eseguire la seguente query:

SELECT
    PetName,
    DOB
FROM Pets;

Risultato:

+---------+------------+
| PetName | DOB        |
+---------+------------+
| Fluffy  | 2020-11-20 |
| Fetch   | 2019-08-16 |
| Scratch | 2018-10-01 |
| Wag     | 2020-03-15 |
| Tweet   | 2020-11-28 |
| Fluffy  | 2020-09-17 |
| Bark    | NULL       |
| Meow    | NULL       |
| Woof    | 2020-10-03 |
| Ears    | 2022-01-11 |
+---------+------------+

Possiamo vedere che due righe hanno valori NULL nella colonna DOB.

Nella query seguente, utilizziamo IFNULL() per sostituire i valori NULL con un valore più significativo per il lettore:

SELECT
    PetName,
    IFNULL( DOB, 'None supplied' )
FROM Pets;

Risultato:

+---------+--------------------------------+
| PetName | IFNULL( DOB, 'None supplied' ) |
+---------+--------------------------------+
| Fluffy  | 2020-11-20                     |
| Fetch   | 2019-08-16                     |
| Scratch | 2018-10-01                     |
| Wag     | 2020-03-15                     |
| Tweet   | 2020-11-28                     |
| Fluffy  | 2020-09-17                     |
| Bark    | None supplied                  |
| Meow    | None supplied                  |
| Woof    | 2020-10-03                     |
| Ears    | 2022-01-11                     |
+---------+--------------------------------+

Espressioni

Viene valutato il valore corrente del primo argomento. Pertanto, se forniamo un'espressione come la seguente:

SELECT IFNULL( 2 * 5, 0 );

Otteniamo questo:

10

Quindi, non otteniamo il 2 * 5 parte. Otteniamo il risultato di quell'espressione (che in questo caso è 10 ).

Lo stesso vale quando il risultato dell'espressione è NULL :

SELECT IFNULL( 2 / 0, 0 );

Otteniamo questo:

0.0000

Vale la pena stare attenti però. Zero è un valore. NULL non è.

Nell'esempio sopra ho restituito zero quando c'era un valore NULL, ma questo potrebbe essere fuorviante o addirittura completamente sbagliato. Immagina se stessimo dividendo i prezzi e il risultato fosse un prezzo pari a zero. OK, se dividiamo un prezzo per zero probabilmente c'è qualcos'altro che non va, ma sono sicuro che avrai capito.

In ogni caso, di solito è meglio utilizzare un valore più significativo che comunichi al lettore che non esiste alcun valore.

Esempio:

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

Risultato:

No value