No MariaDB, o
IFNULL()
A função nos permite substituir valores NULL por outro valor. Sintaxe
IFNULL(expr1,expr2)
Se
expr1
não é NULL
, IFNULL()
retorna expr1
; caso contrário, ele retornará expr2
. Além disso, do MariaDB 10.3,
NVL()
pode ser usado como um alias para o IFNULL()
função. Portanto, temos a opção de usar a seguinte sintaxe:NVL(expr1,expr2)
O resultado é o mesmo, independentemente de qual sintaxe é usada.
Exemplo
Aqui está um exemplo básico que usa o
NULL
constante:SELECT IFNULL( null, 'No Value' );
Resultado:
No Value
Neste caso, usei
IFNULL()
para substituir o valor NULL por No Value
. Aqui está o que acontece quando o primeiro argumento não é
NULL
:SELECT IFNULL( 'Spicy', 'No Value' );
Resultado:
Spicy
Nesse caso, o primeiro argumento é retornado, pois não é
NULL
. Exemplo de banco de dados
Suponha que executemos a seguinte consulta:
SELECT * FROM Employees;
Resultado:
empId name dept ----- ----- ----- 1 Jess Sales 2 Rohit NULL 3 Zohan Sales 4 Homer NULL
Podemos ver que duas linhas têm valores NULL no
dept
coluna. Na consulta a seguir, usamos
IFNULL()
para substituir os valores NULL por um valor mais significativo para o leitor:SELECT
empId,
name,
IFNULL( dept, 'Not yet assigned' ) AS dept
FROM Employees;
Resultado:
empId name dept ----- ----- ---------------- 1 Jess Sales 2 Rohit Not yet assigned 3 Zohan Sales 4 Homer Not yet assigned
Expressões
O valor atual do primeiro argumento é avaliado. Portanto, se fornecermos uma expressão como a seguinte:
SELECT IFNULL( 3 * 7, 0 );
Obtemos isso:
21
Portanto, não recebemos o
3 * 7
papel. Obtemos o resultado dessa expressão (que neste caso é 21
). O mesmo acontece quando o resultado da expressão é
NULL
. Por exemplo, se executarmos o seguinte código:SELECT IFNULL( 3 / 0, 0 );
Obtemos isso:
0.0000
No entanto, este é um exemplo perigoso. Zero é um valor.
NULL
não é. Retornar zero quando há um valor NULL pode ser enganoso ou até mesmo completamente errado. Imagine se estivéssemos lidando com preços. Poderíamos terminar com um preço zero, o que poderia ser incorreto e custar muito dinheiro ao negócio.
Portanto, nesses casos, geralmente é melhor usar um valor mais significativo que transmita ao leitor que não há valor.
Exemplo:
SELECT IFNULL( 3 / 0, 'No value' );
Resultado:
No Value
O NVL()
Função
A partir do MariaDB 10.3,
NVL()
é um alias para IFNULL()
. Portanto, podemos substituir IFNULL()
com NVL()
em qualquer um dos exemplos acima. Exemplo:
SELECT NVL( 3 / 0, 'No value' );
Resultado:
No Value