Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

4 maneiras de substituir NULL por um valor diferente no MySQL


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ção IS NULL (ou IS NOT NULL ) operador
  • O CASE expressão combinada com o IS NULL (ou IS 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;