IF EXISTS ( SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[usf_formata_cpf]') AND type IN (N'FN') ) DROP FUNCTION dbo.usf_formata_cpf; GO CREATE FUNCTION dbo.usf_formata_cpf(@cpf varchar(max), @mascara bit) RETURNS varchar(max) AS -- Nome Artefato/Programa..: usf_formata_cpf.sql -- Autor(es)...............: Emerson Hermann (emersonhermann [at] gmail.com) O Peregrino (http://www.emersonhermann.blogspot.com) -- Data Inicio ............: 21/02/2012 -- Data Atualizacao........: 21/02/2012 -- Versao..................: 0.01 -- Compilador/Interpretador: T-SQL (Transact SQL) -- Sistemas Operacionais...: Windows -- SGBD....................: MS SQL Server 2005/2008 -- Kernel..................: Nao informado! -- Finalidade..............: Store Procedure (Function) para mascara o numero do CPF -- OBS.....................: A entrada é um varchar e o retorno é um varchar formatado do cpf, parametro mascara setado em 0 apenas string com zeros, 1 formata o cpf de fato -- ........................: -- BEGIN DECLARE @cpf_temp varchar(max) -- Pre-validacao 1, se e nulo, entao retorna nulo IF @cpf IS NULL BEGIN RETURN (@cpf) END --fim_se -- Pre-validacao 2, se e diferente de 11 digitos , entao retorna 0 IF LEN(@cpf) > 11 BEGIN RETURN (@cpf) END --fim_se -- Pre-validacao 3, se e tem alguma letra no cpf, entao retorna 0 IF (SELECT CASE WHEN patindex('%[^0-9]%', @cpf) > 0 THEN 1 ELSE 0 END) = 1 BEGIN RETURN (@cpf) END --fim_se -- Pre-validacao 4, se e menor que 11 dig, pode ser oriundo de um bigint, entao colocar zeros a frente SET @cpf_temp = @cpf IF LEN(@cpf) < 11 BEGIN SET @cpf_temp = REPLICATE('0',11-LEN(@cpf))+@cpf END --fim_se -- Se e para formatar mesmo IF @mascara = 1 BEGIN SET @cpf_temp = SUBSTRING(@cpf_temp,1,3) + '.' + SUBSTRING(@cpf_temp,4,3) + '.' + SUBSTRING(@cpf_temp,7,3) + '-' + SUBSTRING(@cpf_temp,10,2) END --fim_se RETURN (@cpf_temp) END; GO -- chamada da function --SELECT dbo.usf_formata_cpf('481604472z',0); --SELECT dbo.usf_formata_cpf('0541371479',1); --SELECT dbo.usf_formata_cpf('05413714793',1); --SELECT dbo.usf_formata_cpf(18404,1); --SELECT dbo.usf_formata_cpf(18404,0);
DBA, MySql, Oracle, Postgres, SQL Server, DB2, BI, TI, Business Intelligence, Data Science, Machine Learning, IoT, Arduino
terça-feira, 27 de março de 2012
Formatar CPF em SQL
Store function para formatar CPF em SQL Server
Assinar:
Postar comentários (Atom)
Querido, meu SQL 2008 não cria esta função nem a marretada. Dá erro e nao consigo descobrir o motivo...:(
ResponderExcluirQual o erro ?
ExcluirCopie o script com Google Chrome ou Firefox
Excluir