SQL ISNULL() , NVL() , IFNULL() e COALESCE() Funções
Olhe para o seguinte "Products" tabela:
p_id | Nome do Produto | Preço unitário | Unidades em estoque | UnidadesPedidas |
---|---|---|---|---|
1 | Jarlsberg | 10.45 | 16 | 15 |
2 | Mascarpone | 32.56 | 23 | |
3 | Gorgonzola | 15,67 | 9 | 20 |
Suponha-se que o "UnitsOnOrder" coluna é opcional, e pode conter valores nulos.
Nós temos a seguinte instrução SELECT:
SELECT ProductName,UnitPrice*(UnitsInStock+UnitsOnOrder)
FROM Products
No exemplo acima, se qualquer um dos "UnitsOnOrder" valores são NULL, o resultado é NULL.
Da Microsoft ISNULL() função é usada para especificar a forma como queremos tratar valores nulos.
A NVL() , IFNULL() , e COALESCE() funções também podem ser utilizados para alcançar o mesmo resultado.
Neste caso, queremos valores NULL a ser zero.
Abaixo, se "UnitsOnOrder" é NULL não vai prejudicar o cálculo, porque ISNULL() retorna um zero se o valor for NULL:
MS Access
SELECT ProductName,UnitPrice*(UnitsInStock+IIF(ISNULL(UnitsOnOrder),0,UnitsOnOrder))
FROM Products
SQL Server
SELECT ProductName,UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0))
FROM Products
Oracle
Oracle não tem um ISNULL() função. No entanto, podemos usar a NVL() função para obter o mesmo resultado:
SELECT ProductName,UnitPrice*(UnitsInStock+NVL(UnitsOnOrder,0))
FROM Products
MySQL
MySQL tem um ISNULL() função. No entanto, ele funciona um pouco diferente do da Microsoft ISNULL() função.
No MySQL, podemos usar o IFNULL() função, como este:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
ou podemos usar o COALESCE() função, como este:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products