Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the breadcrumb-navxt domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /home/devtools/public_html/blog/wp-includes/functions.php on line 6131

Deprecated: A função WP_Dependencies->add_data() foi chamada com um argumento que está obsoleto desde a versão 6.9.0! Os comentários condicionais do IE são ignorados por todos os navegadores compatíveis. in /home/devtools/public_html/blog/wp-includes/functions.php on line 6131
Ordenando valores nulos no PostgreSQL

Ordenando valores nulos no PostgreSQL

Hoje vou demonstrar uma funcionalidade interessante que é nativa do PostgreSQL, o Nulls First e Nulss Lastcom elas é possível realizar a ordenação de consultas demonstrando os registros que não possuem informações, ou seja, nulos, no início ou no fim do resultado.

Para trabalharmos melhor o exemplo, façamos:

1º – Criação da Tabela:

 CREATE TABLE valores_nulos  
 (  
  id bigint NOT NULL,  
  nome character varying(20),  
  dt_nascimento date,  
  CONSTRAINT valores_nulos_pkey PRIMARY KEY (id )  
 )  
 WITH (  
  OIDS=FALSE  
 );  

Vejam que as colunas nome e dt_nascimento aceitam valores nulos, ao invés da coluna id que possui a condição NOT NULL.


2º – Inserindo os registros:

 Insert Into valores_nulos(id,nome,dt_nascimento)  
 Values(1,'PAPO SQL','2011-06-18')  
 ,(2,'VALOR NULO 1',NULL)  
 ,(3,'VALOR NULO 2',NULL)  
 ,(4,'VALOR NULO 3','2012-01-01')  
 ,(5,'VALOR NULO 4',NULL);  

Acima, propositalmente inseri registros nulos na coluna dt_nascimento, então temos três registros sem data de nascimento na tabela valores_nulos.

3º – Vamos montar uma simples consulta para retornar os registros armazenados:

 Select *  
 From valores_nulos;  
 id    nome           dt_nascimento  
 1     PAPO SQL       18/06/2011  
 2     VALOR NULO 1   null       
 3     VALOR NULO 2   null       
 4     VALOR NULO 3   01/01/2012  
 5     VALOR NULO 4   null       

Registrados temos VALOR NULO 12 e 4 que não possuem data de nascimento.

4º – Agora vamos realizar uma ordenação simples nesta tabela (Order By):

 Select *  
 From valores_nulos  
 Order By dt_nascimento;  
 id    nome          dt_nascimento  
 1     PAPO SQL      18/06/2011  
 4     VALOR NULO 3  01/01/2012  
 2     VALOR NULO 1       
 3     VALOR NULO 2       
 5     VALOR NULO 4       

Curiosamente a consulta apresenta os registros que possuem data primeiro do que os registros que não possuem, isto porque, por padrão todo valor nulo é considerado maior, independente do valor dos demais.

Agora vamos aplicar a ordenação destes registros de forma a apresentar nulos primeiro, ou por último, isto vai depender de cada situação.

5º – Ordenando os registros nulos por último:

 Select *  
 From valores_nulos  
 Order By dt_nascimento Nulls Last  
 id     nome         dt_nascimento  
 1     PAPO SQL      18/06/2011  
 4     VALOR NULO 3  01/01/2012  
 2     VALOR NULO 1       
 3     VALOR NULO 2       
 5     VALOR NULO 4       

Vejam que, com o uso da função os registros nulos foram apresentados ao final dos resultados.

6º – Vejamos agora a ordenação dos registros nulos primeiro:

 Select *  
 From valores_nulos  
 Order By dt_nascimento Nulls First  
 id     nome         dt_nascimento  
 2     VALOR NULO 1       
 3     VALOR NULO 2       
 5     VALOR NULO 4       
 1     PAPO SQL      18/06/2011  
 4     VALOR NULO 3  01/01/2012  

Dica simples que pode ajudar e muito naquelas situações atípicas que somos submetidos no dia a dia.

Espero mais uma vez ter sido útil, um grande abraço e até a próxima.

Material de referência:
http://www.postgresql.org/docs/8.3/static/queries-order.html
http://www.bau-de-dev.com/banco-de-dados/postgresql/alterando-ordem-dos-valores-null-utilizando-nulls-first-e-nulls-last

Deixe um comentário