IF EXISTS ( SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[usf_formata_cnpj]') AND type IN (N'FN') ) DROP FUNCTION dbo.usf_formata_cnpj; GO CREATE FUNCTION dbo.usf_formata_cnpj(@cnpj varchar(max), @mascara bit) RETURNS varchar(max) AS -- Nome Artefato/Programa..: usf_formata_cnpj.sql -- Autor(es)...............: Emerson Hermann (emersonhermann [at] gmail.com) O Peregrino (http://www.emersonhermann.blogspot.com) -- Data Inicio ............: 19/09/2012 -- Data Atualizacao........: 19/09/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 CNPJ -- OBS.....................: A entrada é um varchar e o retorno é um varchar formatado do CNPJ, parametro mascara setado em 0 apenas string com zeros, 1 formata o CNPJ de fato -- ........................: -- BEGIN DECLARE @cnpj_temp varchar(max) -- Pre-validacao 1, se e nulo, entao retorna nulo IF @cnpj IS NULL BEGIN RETURN (@cnpj) END --fim_se -- Pre-validacao 2, se e maior que 14 digitos , entao retorna 0 IF LEN(@cnpj) > 14 BEGIN RETURN (@cnpj) END --fim_se -- Pre-validacao 3, se e tem alguma letra no CNPJ, entao retorna 0 IF (SELECT CASE WHEN patindex('%[^0-9]%', @cnpj) > 0 THEN 1 ELSE 0 END) = 1 BEGIN RETURN (@cnpj) END --fim_se -- Pre-validacao 4, se e menor que 14 dig, pode ser oriundo de um bigint, entao colocar zeros a frente SET @cnpj_temp = @cnpj IF LEN(@cnpj) < 14 BEGIN SET @cnpj_temp = REPLICATE('0',14-LEN(@cnpj))+@cnpj END --fim_se -- Se e para formatar mesmo IF @mascara = 1 BEGIN SET @cnpj_temp = SUBSTRING(@cnpj_temp,1,2) + '.' + SUBSTRING(@cnpj_temp,3,3) + '.' + SUBSTRING(@cnpj_temp,6,3) + '/' + SUBSTRING(@cnpj_temp,9,4) + '-' + SUBSTRING(@cnpj_temp,13,2) END --fim_se RETURN (@cnpj_temp) END; GO -- chamada da function -- test 1 SELECT dbo.usf_formata_cnpj('00000000000191',1); -- Banco do Brasil Sede - 00.000.000/0001-91 SELECT dbo.usf_formata_cnpj('00000000000191',0); -- Banco do Brasil Sede - 00000000000191 -- test 2 SELECT dbo.usf_formata_cnpj('191',1); -- Banco do Brasil Sede - 00.000.000/0001-91 SELECT dbo.usf_formata_cnpj('191',0); -- Banco do Brasil Sede - 00000000000191
DBA, MySql, Oracle, Postgres, SQL Server, DB2, BI, TI, Business Intelligence, Data Science, Machine Learning, IoT, Arduino
quarta-feira, 19 de setembro de 2012
Formatar CNPJ em SQL
Store function para formatar CNPJ em SQL Server
Assinar:
Postar comentários (Atom)
Nenhum comentário:
Postar um comentário