Introdução
Quando você estiver gerenciando dados no PostgreSQL, você verá que os valores NULL podem ser um pouco complicados de manusear. Por exemplo, a maioria das expressões retorna um valor NULL quando qualquer elemento da expressão é NULL. Como podemos evitar algumas das dificuldades associadas com os valores NULL? No primeiro artigo desta série em duas partes, explicamos como a função PostgreSQL COALESCE pode ser utilizada para testar valores NULL e substituir outro valor no lugar dos NULLs. Este artigo retomará onde paramos e continuará nossa discussão sobre a função COALESCE e suas aplicações no PostgreSQL.
Prerequisites
Antes de tentar seguir junto com os exemplos neste artigo, tenha certeza que o PostgreSQL já está instalado na sua máquina. Você também deve ter algum conhecimento introdutório do PostgreSQL para entender os exemplos da função COALESCE.
COALESCE na interface de linha de comando do psql
No artigo anterior, nós explicamos como acessar a interface de linha de comando psql
para o PostgreSQL. Precisamos entrar no console de linha de comando psql
uma vez mais para experimentar alguns exemplos de COALESCE.
Vamos começar com o exemplo simples mostrado abaixo:
1
|
SELECT COALESCE ( ‘apple’ , ‘pear’ , ‘strawberry’);
|
A saída desta consulta será:
1
2 |
COALESCE
———- apple |
Como pode ver, a saída retornada é ‘apple’, pois é o primeiro valor não-NULL na lista de argumentos.
Se tivermos um valor NULL como primeiro item da lista, a função COALESCE
irá ignorá-lo, procurando o primeiro valor que não é NULL. Podemos ver como isto funciona na seguinte consulta:
1
|
SELECT COALESCE ( NULL, ‘apple’ , ‘pear’ , ‘strawberry’);
|
A saída será:
1
2 350>4 |
COALESCE
———- apple (1 ROW) |
Use PostgreSQL COALESCE timestamp null
No nosso próximo exemplo, vamos tentar usar a função COALESCE
com o tipo de dados de carimbo da hora.
Primeiro, vamos precisar criar outra tabela no PostgreSQL:
1
2 350>4 5 6 7 |
CRIAR livros de TABELA(
book_id INT PRIMARY KEY NOT NULL, nome_do_livro VARCHAR NÃO NULL, quantidade INT, preço REAL, ano_liberado TIMESTAMP ); |
Tambem precisamos de inserir registos na tabela books
que acabámos de criar:
1
2 350 4 350>5 6 7 |
INSERIR EM livros(book_name, quantity, price, year_released)
VALUES (‘Book1’, 12, 60, ‘2015-07-21 09:10:25+8’), (‘Livro2’, 5, 55, ‘2018-02-12 15:40:15+8’), (‘Livro3’, 10, 90, ‘2017-11-12 00:10:11+8’), (‘Livro4’, 26, 47, NULL), (‘Livro5’, 2, 83, ‘2019-03-05 03:05:08+8’); |
Notificação de que inserimos um valor NULL na nossa tabela na coluna year_released
, que tem um tipo de dado de timestamp
.
Vamos imaginar que gostaríamos de obter o preço total de cada livro. Para obter essa informação, vamos multiplicar os valores de duas colunas: quantity
e price
. A consulta abaixo mostra como isto é feito:
1
2 |
SELECT book_id, book_name, ( quantidade * preço ) AS total_price
FROM books; |
O resultado da consulta será parecido:
1
2 3 4 5 6 350>7 8 |
livro_id | nome_do_livro | total_preço
———+———–+————- 1 | Livro1 | 720 2 | Livro2 | 275 3 | Livro3 | 900 4 | Livro4 | 1222 5 | Livro5 | 166 (5 ROWS) |
Vejamos o conteúdo da tabela books
com esta consulta:
1
|
SELECT * FROM livros;
|
A saída ficaria assim:
1
2 350>4 350>5 6 350>7 8 |
book_id | book_name | quantidade | preço | ano_liberado
———+———–+———-+——-+——————— 1 | Book1 | 12 | 60 | 2015-07-21 09:10:25 2 | Book2 | 5 | 55 | 2018-02-12 15:40:15 3 | Book3 | 10 | 90 | 2017-11-12 00:10:11 4 | Book4 | 26 | 47 |5 | Book5 | 2 | 83 | 2019-03-05 03:05:08 (5 linhas) |
1
2 |
SELECT book_id, book_name,
COALESCE(year_released, CURRENT_TIMESTAMP) FROM books; |
Hereis como será a saída:
1
2 3 4 5 6 7 8 |
livro_id | book_name | COALESCE
———+———–+——————————- 1 | Book1 | 2015-07-21 09:10:25-04 2 | Book2 | 2018-02-12 15:40:15-05 3 | Book3 | 2017-11-12 00:10:11-05 4 | Book4 | 2020-02-13 06:20:41.239926-05 5 | Book5 | 2019-03-05 03:05:08-05 (5 ROWS) |
Conclusão
Nesta série de artigos em duas partes, nós demos uma olhada em profundidade na função PostgreSQL COALESCE. Mostramos vários exemplos de como esta função pode ser usada para testar valores NULL nos seus dados e substituir um valor não NULL, se necessário. Usando esses exemplos como guia, você estará preparado para incorporar a função COALESCE
em suas próprias instruções do PostgreSQL.