A maioria dos principais SGBDs nos fornece uma função para substituir valores nulos por outro valor.
Mas o nome da função tende a diferir entre os DBMSs. Por exemplo, o SQL Server tem um
ISNULL()
função, enquanto outros (como MySQL, MariaDB e SQLite) têm um IFNULL()
função para fazer a mesma coisa. No entanto, para confundir as coisas, MySQL e MariaDB têm um
ISNULL()
função que funciona de forma diferente da função de mesmo nome do SQL Server (a implementação do MySQL e do MariaDB aceita apenas um único argumento e retorna 1
se for null
e 0
se não for). De qualquer forma, no caso do Oracle Database, podemos usar o
NVL()
função para substituir valores nulos por outro valor. Na verdade, o Oracle Database também possui um
NVL2()
função que nos permite fornecer outro valor para usar caso o primeiro argumento não seja null
. Se simplesmente queremos testar se um valor é
null
ou não, podemos usar o IS NULL
condição (ou o IS NOT NULL
para o teste oposto). O NVL()
Função
Aqui está um exemplo que demonstra como o
NVL()
função funciona:SELECT NVL(null, 'Run')
FROM DUAL;
Resultado:
Run
Nesse caso, o primeiro argumento foi
null
e assim o segundo argumento foi retornado. Aqui está o que acontece quando o primeiro argumento não é
null
:SELECT NVL('Walk', 'Run')
FROM DUAL;
Resultado:
Walk
O primeiro argumento é retornado.
O NVL2()
Função
Como mencionado, o Oracle Database também nos fornece o
NVL2()
função. Esta função nos permite fornecer outro valor para usar caso o primeiro argumento não seja null
. Veja um exemplo de como funciona:
SELECT NVL2(null, 2, 3)
FROM DUAL;
Resultado:
3
O primeiro argumento foi
null
e assim o terceiro argumento foi retornado. Aqui está o que acontece quando o primeiro argumento não é
null
:SELECT NVL2(1, 2, 3)
FROM DUAL;
Resultado:
2
O segundo argumento é retornado.
O IS NULL
e IS NOT NULL
Condições
Se queremos apenas descobrir se um valor é ou não
null
, podemos usar o IS NULL
condição de comparação. Como alternativa, podemos usar IS NOT NULL
para verificar se não é null
. Suponha que temos a seguinte tabela:
SELECT * FROM Autoparts
WHERE Price IS NULL;
Resultado:
ID | OE# | PREÇO | MODELO |
---|---|---|---|
2 | 62150B3278 | – | CAMRY |
1 | 62150A3278 | 168 | HILUX |
Nesse caso, o
PRICE
coluna contém um valor nulo para a primeira linha, mas não para a segunda linha. Aqui está um exemplo de uso de
IS NULL
contra essa mesa:SELECT * FROM Autoparts
WHERE Price IS NULL;
Resultado:
ID | OE# | PREÇO | MODELO |
---|---|---|---|
2 | 62150B3278 | – | CAMRY |
Somente a linha com o preço nulo é retornada.
Veja o que acontece quando usamos
IS NOT NULL
:SELECT * FROM Autoparts
WHERE Price IS NOT NULL;
Resultado:
ID | OE# | PREÇO | MODELO |
---|---|---|---|
1 | 62150A3278 | 168 | HILUX |
A outra linha é retornada.