Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL IFNULL() explicado


MySQL tem um IFNULL() função que nos permite substituir facilmente valores NULL por outro valor.

Sintaxe

IFNULL(expr1,expr2)

Se expr1 não é NULL , IFNULL() retorna expr1 ; caso contrário, ele retornará expr2 .

Exemplo


Aqui está um exemplo básico que usa o NULL constante:
SELECT IFNULL( null, 'n/a' );

Resultado:
n/a

Neste caso, usei IFNULL() para substituir o valor NULL pela string n/a .

Aqui está o que acontece quando o primeiro argumento não é NULL :
SELECT IFNULL( 'Cow', 'n/a' );

Resultado:
Cow

Nesse caso, o primeiro argumento é retornado, pois não é NULL .

Exemplo de banco de dados


Suponha que executemos a seguinte consulta:
SELECT
    PetName,
    DOB
FROM Pets;

Resultado:
+---------+------------+
| 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 |
+---------+------------+

Podemos ver que duas linhas têm valores NULL na coluna DOB.

Na consulta a seguir, usamos IFNULL() para substituir os valores NULL por um valor mais significativo para o leitor:
SELECT
    PetName,
    IFNULL( DOB, 'None supplied' )
FROM Pets;

Resultado:
+---------+--------------------------------+
| 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                     |
+---------+--------------------------------+

Expressões


O valor atual do primeiro argumento é avaliado. Portanto, se fornecermos uma expressão como a seguinte:
SELECT IFNULL( 2 * 5, 0 );

Obtemos isso:
10

Portanto, não recebemos o 2 * 5 papel. Obtemos o resultado dessa expressão (que neste caso é 10 ).

O mesmo acontece quando o resultado da expressão é NULL :
SELECT IFNULL( 2 / 0, 0 );

Obtemos isso:
0.0000

Mas vale a pena ter cuidado. Zero é um valor. NULL não é.

No exemplo acima, retornei zero quando havia um valor NULL, mas isso pode ser enganoso ou até mesmo completamente errado. Imagine se estivéssemos dividindo preços e o resultado fosse um preço zero. OK, se estamos dividindo um preço por zero, provavelmente há algo errado, mas tenho certeza que você entendeu.

De qualquer forma, geralmente é melhor usar um valor mais significativo que transmita ao leitor que não há valor.

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

Resultado:
No value