No PostgreSQL, a função COALESCE retorna o primeiro argumento não-nulo. Ele é geralmente usado com a instrução SELECT para lidar com valores nulos efetivamente.
Syntax: COALESCE (argument_1, argument_2, …);
A função COALESCE aceita um número ilimitado de argumentos. Ela retorna o primeiro argumento que não é nulo. Se todos os argumentos forem nulos, a função COALESCE retorna nulos. a função COALESCE avalia os argumentos da esquerda para a direita até encontrar o primeiro argumento não nulo. Todos os argumentos restantes do primeiro argumento não-nulo não são avaliados.
Exemplo:
Para fins de demonstração vamos primeiro criar uma tabela (digamos, items
) usando a declaração abaixo:
CREATE TABLE items ( ID serial PRIMARY KEY, product VARCHAR (100) NOT NULL, price NUMERIC NOT NULL, discount NUMERIC);
Existem quatro campos na tabela items
table:
- id: a chave primária que identifica o item na tabela de itens.
- produto: o nome do produto.
- preço: o preço do produto.
- desconto: o desconto do produto.
Agora inserimos alguns registos na tabela items
usando a declaração INSERT da seguinte forma:
INSERT INTO items (product, price, discount)VALUES ('A', 1000, 10), ('B', 1500, 20), ('C', 800, 5), ('D', 500, NULL);
Finalmente consultamos os preços líquidos dos produtos usando o seguinte:
SELECT product, (price - discount) AS net_priceFROM items;
Esta situação levará ao seguinte:
> se olhar para a quarta linha, notará que o preço líquido do produto D é nulo o que parece não estar correcto. A questão é que o desconto do produto D é nulo, portanto quando tomamos o valor nulo para calcular o preço líquido, o PostgreSQL retorna nulo. O preço correcto, precisamos de assumir que se o desconto for nulo, é zero. Então podemos usar a função COALESCE da seguinte forma:
SELECT product, (price - COALESCE(discount, 0)) AS net_priceFROM items;
Output: