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
Adicionando caracteres à esquerda de um campo no PostgreSQL

Adicionando caracteres à esquerda de um campo no PostgreSQL

Normalmente quem manipula constantemente com muitos arquivos, principalmente importação e exportação sempre se depara com arquivos sem layout definido, formatações incorretas, enfim, diversos problemas que dificultam o trabalho de manipulação do arquivo.

Na minha situação, sempre recebo planilhas com informações de clientes e, nestas planilhas sempre tenho o CPF do cliente. Para quem trabalha bastante com as ferramentas de cálculo disponíveis no mercado sabe que, normalmente quando o CPF possui zeros a esquerda, estes são ‘eliminados’ pela ferramenta e, quando importamos isto para nosso banco de dados a informação vai incorreta.

Montar um script padrão ou desenvolver um sistema para importação destes arquivos é o ideal, mas isto quando trabalhamos com um layout definido.Outra saída seria abrir a planilha e definir o tamanho do campo, mas ai perderia a graça fazer isto, pois, não teríamos este post (:d). Deixando o contexto de lado, vamos a situação na prática.

Minha importação de clientes é feita para a tabela pessoa, que possui a seguinte estrutura:

 CREATE TABLE public.pessoa (  
  id_pessoa       integer NOT NULL,  
  nome         varchar(100),  
  cpf      varchar(30) NOT NULL,  
  dtm_cadastro     timestamp WITHOUT TIME ZONE NOT NULL DEFAULT now(),  
  id_usuario_cadastro  bigint NOT NULL,  
  dtm_alteracao     timestamp WITHOUT TIME ZONE DEFAULT now(),  
  id_usuario_alteracao bigint,  
  /* Keys */  
  CONSTRAINT pessoa_pkey  
   PRIMARY KEY (id_pessoa)  
 ) WITH (  
   OIDS = FALSE  
  );  

Nesta tabela possuo o seguinte registro:

 Select id_pessoa,nome,cpf From pessoa;  
 1     Papo Sql     123456789  

Como podemos ver o CPF existente em minha tabela esta incorreto, pois, possui apenas nove números. Sabendo que o CPF possui 11 números usamos então a função lpad para completar com zeros à esquerda.


A função possui a seguinte estrutura de sintaxe:

lpad(string textlength int[fill text])

Primeira posição (string text), deve ser inserido o campo qual pretende-se completar com a sequencia de caracteres.

Segunda posição (length int), deve ser informado o tamanho a ser retornando pela função.

Terceira posição (fill text), deve ser informado o valor que será inserido/repetido à esquerda do campo.

Em nosso exemplo então teremos:

 Select id_pessoa,nome,lpad(cpf,11,'0') From pessoa;  
 1     Papo Sql     00123456789  

Pronto, campo completado, mas não resolvido o problema, pois, temos apenas um select, a informação na tabela ainda está incorreta, para corrigir isto realizamos a atualização do valor:

 update pessoa  
 set cpf = lpad(cpf,11,'0')  
 where id_pessoa = 1;  

Um ponto a se ressaltar é, o retorno da função sempre será texto, caso o campo a ser atualizado seja um inteiro, deverá haver um conversão de dados.

Voltando ao início do post, mencionei a importação e exportação, então pontuando brevemente sobre a exportação, podemos usar este mesmo contexto, agora exportando os dados do cliente.

Digamos que agora na exportação eu tenha um layout predefinido para seguir e, nele o meu campo CPF tem tamanho 14, devido ao layout prever pessoas físicas e jurídicas, então eu faço:

 Select id_pessoa,nome,lpad(cpf,14,' ') From pessoa;  
 1     Papo Sql    '   00123456789'  

Veja que neste caso eu preenchi com espaços, pois, nosso cliente é uma pessoa física, não jurídica.

Como podemos ver, a função lpad pode ser utilizada de diversas formas, o que vai variar somente é o contexto. Aqui discutimos sua usabilidade no PostgreSQL, mas ela também é nativa no MySQL e  Oracle.

Agora, caso precise fazer tudo que fizemos adicionando valores a direta, inverta o lpad para rdad, função que possui a mesma estrutura de sintaxe do lpad.

Grande abraço e até a próxima.

Material de referência:
http://www.postgresql.org/docs/8.2/static/functions-string.html
http://ricardospinoza.wordpress.com/2010/08/13/preencher-zeros-a-esquerda-com-funcao-oracle/

5 comentários em “Adicionando caracteres à esquerda de um campo no PostgreSQL”

Deixe um comentário