out 29 2010
Formatando CPF ou CNPJ no SQL Server e Oracle!
Esses dias, me bati com um problema quando desenvolvia melhorias de um sistema de terceiros.
Na tabela, um dos campos “guardava” CPF e CNPJ ao mesmo tempo. Até aquele momento, não tinha problema algum, já que era mostrado pelo nome do Cliente/Fornecedor e não por números formatados. Porém, não se atentaram ao fato de um fornecedor com o mesmo nome, pode ter CNPJ diferentes.
Como mostrava a partir de uma view no Sql Server 2008, o problema apareceu. Dessa forma, tive que criar uma função para que ao chamar o campo, o banco reconhecesse o tipo de número (CPF ou CNPJ) e o formatasse.
Antes, eu pensei em fazer diretamente na consulta do SQL Server, que ficaria dessa forma:
- SELECT TOP (100) PERCENT
- CASE WHEN (LEN(CNPJ_CPF) <= 11) THEN
- SUBSTRING(CNPJ_CPF, 1, 3) + '.' +
- SUBSTRING(CNPJ_CPF, 4, 3) + '.' +
- SUBSTRING(CNPJ_CPF, 7, 3) + '-' +
- SUBSTRING(CNPJ_CPF, 10, 2)
- WHEN (LEN(CNPJ_CPF) > 11) THEN
- SUBSTRING(CNPJ_CPF, 1, 2) + '.' +
- SUBSTRING(CNPJ_CPF, 3, 3) + '.' +
- SUBSTRING(CNPJ_CPF, 6, 3) + '/' +
- SUBSTRING(CNPJ_CPF, 9, 4) + '-' +
- SUBSTRING(CNPJ_CPF, 13, 2)
- ELSE
- CNPJ_CPF END AS Fornecedor
- FROM Fornecedores
Pronto, ele já reconhecia o formato, e trazia formatado como devia.
Porém, eu gostaria de usar em outros modelos e casos que precisasse. Então resolvi traduzir isso para uma Function genérica, que me permitia chamar diretamente de qualquer campo que precisasse.
Não é complexa, e ficou dessa forma:
- CREATE FUNCTION FORMATAR_CPF_CNPJ (@VALOR VARCHAR(20))
- RETURNS VARCHAR(20)
- AS
- BEGIN
- DECLARE @RESULTADO VARCHAR(20)
-
- IF LEN(@VALOR)<= 11
- BEGIN
- SELECT @RESULTADO=SUBSTRING(@VALOR, 1, 3)+ '.' +
- SUBSTRING(@VALOR, 4, 3)+ '.' +
- SUBSTRING(@VALOR, 7, 3)+ '-' +
- SUBSTRING(@VALOR, 10, 2)
- END
-
- ELSE
-
- BEGIN
- SELECT @RESULTADO=SUBSTRING(@VALOR, 1, 2)+ '.' +
- SUBSTRING(@VALOR, 3, 3)+ '.' +
- SUBSTRING(@VALOR, 6, 3)+ '/' +
- SUBSTRING(@VALOR, 9, 4)+ '-' +
- SUBSTRING(@VALOR, 13, 2)
- END
-
- RETURN (@RESULTADO)
-
- END
-
- GO
Agora, com a função criada, para testar use o seguinte código:
SELECT dbo.FORMATAR_CPF_CNPJ('00111111111111') AS FORNECEDORSimples não?
No Oracle, também é possível fazer o mesmo com uma função:
FUNCTION Formatar_CPF_CNPJ (Valor VARCHAR2) RETURN VARCHAR2 IS Result VARCHAR2(20);
BEGIN
IF LENGTH(Valor) > 11 THEN
result := SUBSTR(Valor,1,2)||'.'||
SUBSTR(Valor,3,3)||'.'||
SUBSTR(Valor,6,3)||'/'||
SUBSTR(Valor,9,4)||'-'||
SUBSTR(Valor,13,2);
ELSE
result := SUBSTR(Valor,1,3)||'.'||
SUBSTR(Valor,4,3)||'.'||
SUBSTR(Valor,7,3)||'-'||
SUBSTR(Valor,10,2);
END IF;
RETURN(Result);
END Formatar_CPF_CNPJ;Bacana né? Espero que esse código ajude!



