terça-feira, 26 de junho de 2012

Ifnull no PostgreSQL


Salve salve colegas.

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)') ...
Como um CASE expressão, 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:


1º Passo - Criando a tabela:
 -- 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.

Clique aqui e veja todas as matérias sobre PostgreSQL

Um comentário: