Inserir caracteres em CPF (SQL)

SQL

05/09/2019

Boa noite pessoal,

Sou novo aqui e n ão sei se já houve a discussão sobre esse assunto aqui.

Estou com um banco (SQL) com vários cpfs cadastrados e todos eles estão sem ponto e traço, mas eu preciso que estejam com ponto e traço.
Atualmente estão assim: 12345678901 e eu preciso que fique 123.456.789-01

Já tentei algumas coisas que vi na internet, mas nada ajudou muito, até porque a maioria das vezes vi pessoas querendo remover esses caracteres.

Como eu conseguiria fazer isso?
Vinicius

Vinicius

Curtidas 0

Melhor post

Emerson Nascimento

Emerson Nascimento

06/09/2019

algo assim:
SELECT
	LEFT(CampoCPF,3)+'.'+SUBSTRING(CampoCPF,4,3)+'.'+SUBSTRING(CampoCPF,7,3)+'-'+SUBSTRING(CampoCPF,10,2) CPF,
	*
FROM
	Tabela
WHERE
	CampoCPF > ''

GOSTEI 1

Mais Respostas

Jair N.

Jair N.

05/09/2019

Bem SQL qual o banco MSSQLServer? Faça uma função de retorno tanto para CPF como CGC e faça a chamada Exemplo

SELECT dbo.fnc_str_check_cnp_fj(2, tab.campo_cpf) AS cpf_formatado FROM tabela tab;

-- ===============================================================================
-- SQLSERVER : Calculo do CNP-FJ (Física/Jurídica) CPF OU CGC
-- ===============================================================================
--DROP FUNCTION dbo.fnc_str_check_cnp_fj;
CREATE FUNCTION dbo.fnc_str_check_cnp_fj(@intTipo INTEGER, @numCNP_FJ VARCHAR(20))
RETURNS VARCHAR(25) AS
BEGIN
DECLARE
@vchRetorno VARCHAR(25) = 'F|I|Incorreto'
, @txtNumero VARCHAR(20) = ''
, @i INTEGER = 0
, @intNumDig_1 INTEGER
, @intNumDig_2 INTEGER
, @intCalDig_1 INTEGER
, @intCalDig_2 INTEGER;

-- Limpando a informação...
WHILE (CAST(LEN(@numCNP_FJ) AS INTEGER) +1 > @i)
BEGIN
IF (CHARINDEX(SUBSTRING(@numCNP_FJ, @i, 1), '0123456789') > 0)
SET @txtNumero = CONCAT(@txtNumero, SUBSTRING(@numCNP_FJ, @i, 1));
SET @i = @i + 1;
END

-- SE A INFORMAÇÃO FOR DE UM CADASTRO NACIONAL DE PESSOA JURÍDICA...
IF (CAST(LEN(@txtNumero) AS INTEGER) = 14)
BEGIN

SET @i = 1;
SET @intCalDig_1 = 0;
SET @intCalDig_2 = 0;
-- Coleta do primeiro dígito verificador CGC
SET @intNumDig_1 = CAST(SUBSTRING(@txtNumero, 13, 1) AS INTEGER);
SET @intNumDig_2 = CAST(SUBSTRING(@txtNumero, 14, 1) AS INTEGER);
SET @txtNumero = SUBSTRING(@txtNumero, 1, 12);

-- Calculo do CNP-Jurídica...
WHILE NOT (@i > 12)
BEGIN
SET @intCalDig_1 = @intCalDig_1 + (CAST(SUBSTRING(@txtNumero, @i, 1) AS INTEGER) * CAST(SUBSTRING('543298765432', @i, 1) AS INTEGER));
SET @i = @i + 1;
END

SET @intCalDig_1 = (@intCalDig_1 % 11);

IF (@intCalDig_1 = 0) OR (@intCalDig_1 = 1)
SET @intCalDig_1 = 0;
ELSE
SET @intCalDig_1 = 11 - @intCalDig_1;

-- Coleta do segundo dígito verificador do CGC
SET @txtNumero = @txtNumero + CAST(@intCalDig_1 AS CHAR(1));
SET @i = 1;

WHILE NOT (@i > 13)
BEGIN
SET @intCalDig_2 = @intCalDig_2 + (CAST(SUBSTRING(@txtNumero, @i, 1) AS INTEGER) * CAST(SUBSTRING('6543298765432', @i, 1) AS INTEGER));
SET @i = @i + 1;
END

SET @intCalDig_2 = (@intCalDig_2 % 11);

IF (@intCalDig_2 = 0) OR (@intCalDig_2 = 1)
SET @intCalDig_2 = 0;
ELSE
SET @intCalDig_2 = 11 - @intCalDig_2;

-- Retorno do calculo do CNP-Jurídica..
IF (@intCalDig_1 = @intNumDig_1) AND (@intCalDig_2 = @intNumDig_2)
SET @vchRetorno = 'V|J|'+ SUBSTRING(@txtNumero,1,2) + '.' + SUBSTRING(@txtNumero,3,3) + '.' + SUBSTRING(@txtNumero,6,3) + '/' + SUBSTRING(@txtNumero,9,4) + '-' + CAST(@intCalDig_1 AS CHAR(1)) + CAST(@intCalDig_2 AS CHAR(1));
ELSE
SET @vchRetorno = 'F|J|CNP-J Dígito:' + CAST(@intCalDig_1 AS CHAR(1)) + CAST(@intCalDig_2 AS CHAR(1));
-- Retorna o Resultado...
IF (SUBSTRING(@vchRetorno, 1, 1) = 'V') AND (SUBSTRING(@txtNumero, 1, 11) = SUBSTRING(@txtNumero, 3, 11))
BEGIN
SET @vchRetorno = 'V|I|CNP-J Invalido';
-- PRINT N'Cadastro de pessoa incorreto!';
END
-- Finalizando o processo...
END ELSE
-- SE A INFORMAÇÃO FOR DE UM CADASTRO NACIONAL DE PESSOA FÍSICA...
IF (CAST(LEN(@txtNumero) AS INTEGER) = 11)
BEGIN

SET @i = 1;
SET @intCalDig_1 = 0;
SET @intCalDig_2 = 0;
-- Coleta do primeiro dígito verificador CPF..
SET @intNumDig_1 = CAST(SUBSTRING(@txtNumero, 10, 1) AS INTEGER);
SET @intNumDig_2 = CAST(SUBSTRING(@txtNumero, 11, 1) AS INTEGER);
SET @txtNumero = SUBSTRING(@txtNumero, 1, 9);

-- Calculo do CNP-Física...
WHILE NOT (@i > 9)
BEGIN
SET @intCalDig_1 = @intCalDig_1 + (CAST(SUBSTRING(@txtNumero, @i, 1) AS INTEGER) * (11 - @i));
SET @i = @i + 1;
END

SET @intCalDig_1 = (@intCalDig_1 % 11);

IF (@intCalDig_1 = 0) OR (@intCalDig_1 = 1)
SET @intCalDig_1 = 0;
ELSE
SET @intCalDig_1 = 11 - @intCalDig_1;

-- Coleta do segundo dígito verificador CPF..
SET @txtNumero = @txtNumero + CAST(@intCalDig_1 AS CHAR(1));
SET @i = 1;

WHILE NOT (@i > 10)
BEGIN
SET @intCalDig_2 = @intCalDig_2 + (CAST(SUBSTRING(@txtNumero, @i, 1) AS INTEGER) * (12 - @i));
SET @i = @i + 1;
END

SET @intCalDig_2 = (@intCalDig_2 % 11);

IF (@intCalDig_2 = 0) OR (@intCalDig_2 = 1)
SET @intCalDig_2 = 0;
ELSE
SET @intCalDig_2 = 11 - @intCalDig_2;

-- Retorno do calculo do CNP-Física...
IF (@intCalDig_1 = @intNumDig_1) AND (@intCalDig_2 = @intNumDig_2)
SET @vchRetorno = 'V|F|' + SUBSTRING(@txtNumero,1,3) + '.' + SUBSTRING(@txtNumero,4,3) + '.' + SUBSTRING(@txtNumero,7,3) + '-' + CAST(@intCalDig_1 AS CHAR(1)) + CAST(@intCalDig_2 AS CHAR(1));
ELSE
SET @vchRetorno = 'F|F|CNP-F Dígito:' + CAST(@intCalDig_1 AS CHAR(1)) + CAST(@intCalDig_2 AS CHAR(1));
-- Retorna o resultado...
IF (SUBSTRING(@vchRetorno, 1, 1) = 'V') AND (SUBSTRING(@txtNumero, 1, 8) = SUBSTRING(@txtNumero, 3, 8))
BEGIN
SET @vchRetorno = 'V|I|CNP-F Invalido';
-- PRINT N'Cadastro de pessoa incorreto!';
END
-- Finalizando o processo...
END
-- Retorno do calculo do Cadastro Nacional de Pessoa...
RETURN CASE @intTipo WHEN 0 THEN SUBSTRING(@vchRetorno, 1, 1)
WHEN 1 THEN SUBSTRING(@vchRetorno, 3, 1)
WHEN 2 THEN SUBSTRING(@vchRetorno, 5, 20)
WHEN 3 THEN REPLACE(SUBSTRING(@vchRetorno, 1, 3), '|', '')
ELSE @vchRetorno END;
-- Retorno do resultado...
END;

GOSTEI 1
POSTAR