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
CASEexpressã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;