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