Do MariaDB 10.3,
NVL() pode ser usado como um alias para o IFNULL() função. Portanto, ambas as funções nos permitem substituir valores NULL por outro valor. Sintaxe
NVL(expr1,expr2) Se
expr1 não é NULL , NVL() retorna expr1 ; caso contrário, ele retornará expr2 . Dado
NVL() é um alias para IFNULL() , também podemos usar a seguinte sintaxe:IFNULL(expr1,expr2) Ambas as sintaxes acima retornam o mesmo resultado.
Exemplo
Aqui está um exemplo básico que usa o
NULL constante:SELECT NVL( null, 'No Value' ); Resultado:
No Value
Neste caso, usei
NVL() para substituir o valor NULL por No Value . Aqui está o que acontece quando o primeiro argumento não é
NULL :SELECT NVL( 'Spicy', 'No Value' ); Resultado:
Green
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
NVL() para substituir os valores NULL por um valor mais significativo para o leitor:SELECT
empId,
name,
NVL( 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 NVL( 4 * 10, 0 ); Obtemos isso:
40
Portanto, não recebemos o
4 * 10 papel. Obtemos o resultado dessa expressão (que neste caso é 40 ). O mesmo acontece quando o resultado da expressão é
NULL :SELECT NVL( 4 / 0, 0 ); Resultado:
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.
Nesses casos, geralmente é melhor usar um valor mais significativo que transmita ao leitor que não há valor.
Exemplo:
SELECT NVL( 4 / 0, 'No value' ); Resultado:
No Value
O IFNULL() Função
Como mencionado,
NVL() é um alias para IFNULL() . Portanto, podemos substituir NVL() com IFNULL() em qualquer um dos exemplos acima. Exemplo:
SELECT IFNULL( 4 / 0, 'No value' ); Resultado:
No Value