Para quem inicia os trabalhos com o PostgreSQL, sempre sentimos algumas diferenças de funções nativas, principalmente quem originou-se do MySQL, o que é o meu caso.
Este impacto as vezes é negativo, pois, gera um desconforto no analista tendo em vista as facilidade que ele tinha no outro SGBD, o que pode ocasionar críticas ao nosso elefante. Dentre as funções posso citar uma função muito útil que não existe no PostgreSQL, e que é a Ifnull, qual nosso amigo elefante substitui através da função coalesce. Para entender melhor primeiramente vamos conhecer a função:
“
COALESCE
( valor [ ... ])
COALESCE
retorna o primeiro de seus argumentos que não é nulo. Null é retornado somente se todos os argumentos são nulos. É frequentemente utilizado para substituir um valor padrão para valores nulos quando os dados são usados para exibição, por exemplo:SELECT COALESCE (descrição, short_description, '(nenhuma)') ...
COALESCE
não vai avaliar os argumentos que não são necessários para determinar o resultado, ou seja, os argumentos para o direito de o argumento não nulo primeiro não são avaliados. Esta função SQL padrão oferece recursos similares ao NVL
e IFNULL
, que são usados em alguns sistemas de banco de dados.”Agora que já conhecemos a função, vamos exercitar um pouco:
-- Table: paposql.pessoa
-- DROP TABLE paposql.pessoa;
CREATE TABLE paposql.pessoa
(
id bigint NOT NULL,
nome character varying(100),
dt_nascimento date,
CONSTRAINT pk_id_pessoa PRIMARY KEY (id )
)
WITH (
OIDS=FALSE
);
ALTER TABLE paposql.pessoa
OWNER TO postgres;
2º Passo – Inserindo os registros:
INSERT INTO paposql.pessoa(
id, nome, dt_nascimento)
VALUES (1,'Pessoa 1','2012-01-01')
,(2,'Pessoa 2','2011-01-01')
,(3,'Pessoa 3',null)
,(4,'Pessoa 4','2010-01-01')
,(5,'Pessoa 5',null);
3º Passo – Agora, vamos executar um comando select para retornar as pessoas cadastradas no banco de dados:
Select id, nome, dt_nascimento
From paposql.pessoa
id nome dt_nascimento
1 "Pessoa 1" "2012-01-01"
2 "Pessoa 2" "2011-01-01"
3 "Pessoa 3" ""
4 "Pessoa 4" "2010-01-01"
5 "Pessoa 5" ""
Como podemos ver, os registros 3 e 5 não possuem data de nascimento, isto porque no momento da inclusão alimentamos a tabela com o valor Null. Mas neste exemplo, preciso que a coluna possua um valor, para isto utilizaremos o coalesce, vamos ao exemplo:
4º – Passo – Solucionando o problema:
Select id, nome, Coalesce(dt_nascimento,current_date)
From paposql.pessoa
id nome coalesce
1 "Pessoa 1" "2012-01-01"
2 "Pessoa 2" "2011-01-01"
3 "Pessoa 3" "2012-06-26"
4 "Pessoa 4" "2010-01-01"
5 "Pessoa 5" "2012-06-26"
Pronto, com o coalesce retornamos um valor para os registros que possuem o valor Null. Neste exemplo utilizei um campo data de nascimento para demonstração, mas, por obrigação este campo em um cadastro deve possuir a condição not null, evitando assim valores nulos, o intuito foi somente aplicar a situação.
Espero mais uma vez ter sido útil, um grande abraço e até a próxima.
boa!!! essa eu não sabia! muito obrigado!