No MySQL, às vezes você não quer que valores NULL sejam retornados como
NULL
. Às vezes, você deseja que valores NULL sejam retornados com um valor diferente, como “N/A”, “Not Applicable”, “None” ou até mesmo a string vazia “”. Felizmente, existem várias maneiras de fazer isso no MySQL.
Aqui estão quatro:
- O
IFNULL()
função - O
COALESCE()
função - O
IF()
função combinada com a funçãoIS NULL
(ouIS NOT NULL
) operador - O
CASE
expressão combinada com oIS NULL
(ouIS NOT NULL
) operador
Exemplos dessas opções estão abaixo.
Dados de amostra
Primeiro, vamos pegar alguns dados de exemplo:
USE Solutions; SELECT TaskCode From Tasks;
Resultado:
+----------+ | TaskCode | +----------+ | gar123 | | NULL | | NULL | | dog456 | | NULL | | cat789 | +----------+
Portanto, temos três valores NULL e três valores não NULL.
A função IFNULL()
Dado o seu nome, esta é provavelmente a opção mais óbvia para substituir valores NULL no MySQL. Esta função é basicamente o equivalente a
ISNULL()
no SQL Server. O
IFNULL()
A função permite que você forneça dois argumentos. O primeiro argumento é retornado somente se não for NULL. Se for NULL, o segundo argumento será retornado. Aqui está um exemplo de uso de
IFNULL()
em relação ao nosso conjunto de dados de amostra:SELECT IFNULL(TaskCode, 'N/A') AS Result FROM Tasks;
Resultado:
+--------+ | Result | +--------+ | gar123 | | N/A | | N/A | | dog456 | | N/A | | cat789 | +--------+
Aqui, nós simplesmente substituímos os valores NULL por
N/A
. A função COALESCE()
Esta função é semelhante ao
IFNULL()
função, mas ligeiramente diferente. Essa função segue o padrão ANSI SQL e é amplamente implantada em vários RDBMSs . A maneira como funciona é que você fornece quantos argumentos precisar.
COALESCE()
retornará o primeiro não-NULL
valor na lista ou NULL
se não houver nenhum não NULL
valores. Assim:
SELECT COALESCE(TaskCode, 'N/A') AS Result FROM Tasks;
Resultado:
+--------+ | Result | +--------+ | gar123 | | N/A | | N/A | | dog456 | | N/A | | cat789 | +--------+
Assim, obtemos exatamente o mesmo resultado anterior.
No entanto, a diferença com esta função é que, como mencionado, você pode fornecer uma lista de argumentos. O
COALESCE()
A função levará o que for o primeiro valor não NULL. Por exemplo, podemos adicionar
NULL
como o primeiro argumento e coloque None
antes de N/A
e veja o que acontece:SELECT COALESCE(NULL, TaskCode, 'None', 'N/A') AS Result FROM Tasks;
Resultado:
+--------+ | Result | +--------+ | gar123 | | None | | None | | dog456 | | None | | cat789 | +--------+
Ele pulou o primeiro
NULL
como esperado, ele ignorou quaisquer valores NULL no TaskCode
coluna, antes de escolher None
. O N/A
value não foi usado neste caso porque None
veio primeiro e é um valor não NULL. A função IF() combinada com IS NULL/IS NOT NULL
O
IS NULL
e IS NOT NULL
Os operadores permitem que você teste valores NULL e apresente um valor diferente dependendo do resultado. Podemos usar esses operadores dentro do
IF()
função, para que os valores não NULL sejam retornados e os valores NULL sejam substituídos por um valor de nossa escolha. Exemplo:
SELECT IF(TaskCode IS NOT NULL, TaskCode, 'N/A') AS Result FROM Tasks;
Resultado:
+--------+ | Result | +--------+ | gar123 | | N/A | | N/A | | dog456 | | N/A | | cat789 | +--------+
Portanto, o mesmo resultado que com o
IFNULL()
e COALESCE()
funções. E, claro, podemos trocar
IS NOT NULL
com IS NULL
. Se fizermos isso, precisaríamos trocar os argumentos subsequentes também:SELECT IF(TaskCode IS NULL, 'N/A', TaskCode) AS Result FROM Tasks;
A expressão CASE combinada com IS NULL/IS NOT NULL
Outra maneira de fazer isso é usar o
CASE
expressão:SELECT CASE WHEN TaskCode IS NOT NULL THEN TaskCode ELSE 'N/A' END AS Result FROM Tasks;
Resultado:
+--------+ | Result | +--------+ | gar123 | | N/A | | N/A | | dog456 | | N/A | | cat789 | +--------+
Assim como no exemplo anterior, isso pode ser reescrito para usar
IS NULL
em vez de IS NOT NULL
:SELECT CASE WHEN TaskCode IS NULL THEN 'N/A' ELSE TaskCode END AS Result FROM Tasks;