No MariaDB, o
COALESCE()
O operador retorna o primeiro valor não NULL na lista ou NULL se não houver valores não NULL. Sintaxe
A sintaxe fica assim:
COALESCE(value,...)
Exemplo
Aqui está um exemplo simples para demonstrar:
SELECT COALESCE(null, 'Red', 'Black');
Resultado:
Red
Neste caso,
Red
foi o primeiro valor não NULL, então COALESCE()
retornou esse valor. Black
também não era NULL, mas veio depois de Red
e por isso não foi devolvido. Exemplo de banco de dados
Suponha que executemos a seguinte consulta:
SELECT
PetName,
DOB AS "Date of Birth"
FROM Pets;
E obtemos o seguinte resultado:
+---------+---------------+ | PetName | Date of Birth | +---------+---------------+ | Fluffy | 2020-11-20 | | Fetch | 2019-08-16 | | Scratch | 2018-10-01 | | Wag | 2020-03-15 | | Tweet | 2020-11-28 | | Fluffy | 2020-09-17 | | Bark | NULL | | Meow | NULL | +---------+---------------+
Podemos ver que as duas últimas linhas possuem valores NULL na coluna DOB.
Se quisermos substituir
NULL
com outro valor, poderíamos alterar a consulta da seguinte forma:SELECT
PetName,
COALESCE(DOB, 'None Supplied') AS "Date of Birth"
FROM Pets;
Resultado:
+---------+---------------+ | PetName | Date of Birth | +---------+---------------+ | Fluffy | 2020-11-20 | | Fetch | 2019-08-16 | | Scratch | 2018-10-01 | | Wag | 2020-03-15 | | Tweet | 2020-11-28 | | Fluffy | 2020-09-17 | | Bark | None Supplied | | Meow | None Supplied | +---------+---------------+
Expressões
COALESCE()
retorna o valor atual da primeira expressão que inicialmente não é avaliada como NULL
. Portanto, se passarmos uma expressão como esta:SELECT COALESCE( null, 5 * 2 );
Obtemos isso:
10
Quando todos os valores são NULL
Se todos os valores forem
NULL
, COALESCE()
retorna NULL
:SELECT COALESCE( null, null );
Resultado:
NULL
COALESCE()
vs IFNULL()
Quando usado com dois valores,
COALESCE()
funciona da mesma forma que IFNULL
:SET @a = null, @b = 52;
SELECT
COALESCE(@a, @b),
IFNULL(@a, @b);
Resultado:
+------------------+----------------+ | COALESCE(@a, @b) | IFNULL(@a, @b) | +------------------+----------------+ | 52 | 52 | +------------------+----------------+
Contagem de argumentos inválida
Usando
COALESCE()
sem nenhum argumento resulta em um erro:SELECT COALESCE();
Resultado:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1