Legal! Vivendo e aprendendo...  :)

Em 8 de novembro de 2010 21:37, Osvaldo Kussama
<osvaldo.kuss...@gmail.com> escreveu:
> Em 8 de novembro de 2010 18:14, Emerson Hermann
> <emersonherm...@gmail.com> escreveu:
>> /*
>> 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 (emersonherm...@gmail.com)
>> 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 (emersonherm...@gmail.com)
>> 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
>> <osvaldo.kuss...@gmail.com> escreveu:
>>> Em 8 de novembro de 2010 17:39, Marcone <marconepe...@gmail.com> 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.
>>>
>
>
> Apenas para simplificar suas funções de formatação poderiam ser apenas:
> SELECT to_char(1234567890,'000"."000"."000"-"00') AS cpf;
> SELECT to_char(1234567000199,'00"."000"."000"/"0000"-"00') AS cnpj;
>
> Osvaldo
> _______________________________________________
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a