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