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