hum... pelo que eu entendo quandar CPF num campo char(14) junto com o CNPJ 
seria mais custoso para o banco... haja visto que serão guardados os 
caracteres em branco não é?

E na hora de recuperar voce tem que fazer uso do Trim() senao pode dar xabu, 
pois
"123   "
é diferencte de
"123"

Ou seja num if se esquecer do trim vai quebrar a cabeça até achar o erro.

Mas no final acho que apesar de existirem as regras existem também as 
excessões segundo a necessidade e forma de cada um trabalhar...


Marcelo Silva
------------------------------------------------
msn: [email protected]
Tel.: (11) 2962-7390
Cel.: (11) 9693-4251

Linux Kubuntu User number is # 24362

----- Original Message ----- 
From: "Eduardo Az - EMBRASIS Informática e O&M" <[email protected]>
To: "Comunidade PostgreSQL Brasileira" <[email protected]>
Sent: Monday, November 08, 2010 8:09 PM
Subject: Re: [pgbr-geral] campo cpf


?Eu neste caso, acho melhor char(11) só cpf e char(14) cnpj ou cnpj junto
com cpf.
Minhas justificativas:
char porque: este campo não vai ser usado para calculos (tipo salarios,
vendas,etc) e o uso de qualuqer tipo de campo valor ao meu ver é mais
dispendioso para o banco de dados.
char em vez de varchar  porque: melhora no desempenho, indexar com char gera
uma resposta mais rápida que em varchar (verifiquei pessoalmente e também
via literatura sobre isto).

Só não concordo com vc sobre o uso de varchar, pelo motivo citado acima.

Eduardo Az
Dep.TI
EMBRASIS
+55(11)2122-0241 PABX
+55(11)8125-3845 TIM
+55(11)9826-0138 VIVO
[email protected]
-----Mensagem Original----- 
From: Marcelo Silva
Sent: Monday, November 08, 2010 6:35 PM
To: Comunidade PostgreSQL Brasileira
Subject: Re: [pgbr-geral] campo cpf

Olha fiquei meio tonto aqui rsrs
Não sou DBA sou programador Delphi, PHP, mas eu quem crio minhas bases, pois
trabalho sozinho em casa, e gostaria de entender melhor isso.
Por que todo esse trabalho?
O ganho em guardar Bigint é tão grande assim, com relação ao char ou
varchar?
Ou existe alguma "regra aurea" para estes casos?
Eu por exemplo coloco em um campo Varchar(14) e guardo somente numeros tanto
cpf como cnpj e na mesma tabela tem um campo Char(1) que informa se é P ou
F, então formato na hora de exibir, outra coisa que faço é validar os dados
antes de incluir na base, se é CPF ou CNPJ valido conforme a escolha do
usuário.
Por que uso Varchar e não Char?
Porque presumo que terei 11 ou 14 caracteres no campo e o banco se encarrega
de alocar conforme o tamanho da string.
Bem, não tenho notato nada de anormal nas minhas aplicações, mas, sabem como
é... se tiver dicas pra melhorar, estamos nessa.


Marcelo Silva
------------------------------------------------
msn: [email protected]
Tel.: (11) 2962-7390
Cel.: (11) 9693-4251

Linux Kubuntu User number is # 24362




----- Original Message ----- 
From: "Emerson Hermann" <[email protected]>
To: "Comunidade PostgreSQL Brasileira" <[email protected]>
Sent: Monday, November 08, 2010 6:14 PM
Subject: Re: [pgbr-geral] campo cpf


/*
Eu uso bigint  sugerido por Oswaldo e na hora da apresentação uso
essas duas functions:
Detalhe não valida os cpf apenas mascara
*/

DROP FUNCTION IF EXISTS sp_formataCPF(cpf_bigint BIGINT);
CREATE OR REPLACE FUNCTION sp_formataCPF (cpf_bigint BIGINT) RETURNS TEXT AS
$$
--OBS: Essa function nao faz a validacao do CPF, apenas formata para o
modo texto.
DECLARE
cpf_text  TEXT;
BEGIN

     IF LENGTH(CAST (cpf_bigint AS TEXT))  <= 11 THEN
        cpf_text := REPEAT('0', 11-LENGTH(CAST (cpf_bigint AS TEXT)))
|| CAST (cpf_bigint AS TEXT); -- efetua a conversao
     ELSE
        cpf_text := 'CPF >11 DIG'; -- caso o cpf ultrapasse os 11 digitos
     END IF;

     RETURN cpf_text; -- Retorna CPF em formato texto

END;
$$ LANGUAGE plpgsql;
COMMENT ON FUNCTION sp_formataCPF(cpf_bigint BIGINT) IS '
Autor: O Peregrino ([email protected])
Function que converte CPF em BIGINT para TEXT.
--OBS: Nao efetua validacao do CPF, excetuando-se caso o CPF
ultrapasse 11 digitos.
--Exemplo de uso:
--SELECT sp_formataCPF(848327462); -- resultado "00848327462"

'
;


-- adotando polimorfismo da função sp_formataCPF

DROP FUNCTION IF EXISTS sp_formataCPF(cpf_bigint BIGINT, mask BOOLEAN);
CREATE OR REPLACE FUNCTION sp_formataCPF (cpf_bigint BIGINT, mask
BOOLEAN) RETURNS TEXT AS $$
--OBS: Essa function nao faz a validacao do CPF, apenas formata para o
modo texto e adiciona o mascaramento.
DECLARE
cpf_text  TEXT;
BEGIN

     IF LENGTH(CAST (cpf_bigint AS TEXT))  <= 11 THEN
        cpf_text := REPEAT('0', 11-LENGTH(CAST (cpf_bigint AS TEXT)))
|| CAST (cpf_bigint AS TEXT); -- efetua a conversao
        IF mask THEN
          cpf_text := SUBSTRING(cpf_text FROM 1 FOR 3)
                      || '.'
                      || SUBSTRING(cpf_text FROM 4 FOR 3)
                      || '.'
                      || SUBSTRING(cpf_text FROM 7 FOR 3)
                      || '-'
                      || SUBSTRING(cpf_text FROM 10 FOR 2); -- faz o
mascaramento do cpf
        END IF;
     ELSE
        cpf_text := 'CPF >11 DIG'; -- caso o cpf ultrapasse os 11 digitos
     END IF;

     RETURN cpf_text; -- Retorna CPF em formato texto

END;
$$ LANGUAGE plpgsql;
COMMENT ON FUNCTION sp_formataCPF(cpf_bigint BIGINT, mask BOOLEAN) IS '
Autor: O Peregrino ([email protected])
Function que converte CPF em BIGINT para TEXT com opcao para adicionar
mascara.
--OBS: Nao efetua validacao do CPF, excetuando-se caso o CPF
ultrapasse 11 digitos.
--Exemplo de uso:
--SELECT sp_formataCPF(848327462,TRUE); -- resultado "008.483.274-62"
'
;



Em 8 de novembro de 2010 16:50, Osvaldo Kussama
<[email protected]> escreveu:
> Em 8 de novembro de 2010 17:39, Marcone <[email protected]> escreveu:
>> No meu caso eu já uso o char, pq com campos numéricos não serão
>> guardados os zeros à esquerda. Se você for usar o mesmo campo para
>> armazenar CPF e CNPJ os zeros à esquerda podem transformar um CNPJ em
>> um CPF (verificações à parte). Eu já tive trabalho com isso e não
>> recomendo campos numéricos para CPF/CNPJ.
>>
>
>
> Creio que você está fazendo uma confusão entre o formato de
> armazenamento e o formato de exibição.
> O número 1 = 01 = 001 etc, a cadeia de caracteres "1" realmente é
> diferente de "01" ou "001" mas tanto o CPF quanto o CNPJ são códigos
> numéricos, ou seja, zeros a esquerda não alteram seu significado.
>
> Osvaldo
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral 

_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a