Pular para o conteúdo

Formatando saída com regexp_replace – CPF

Formatando saída com regexp_replace – CPF

Estava analisando algumas queries de relatório e muitas delas tratavam saída de CPF utilizando SUBSTR e vários subcomponentes para tratar essa saída.

Observei que o código era algo do tipo abaixo:

SQL
SUBSTR(C1,1,3)||'.'||SUBSTR(C1,4,3)||'.'||SUBSTR(C1,7,3)||'-'||SUBSTR(C1,10)

Pensei que poderia utilizar o regexp_replace para minimizar a utilização de várias funções com concatenação para algo mais simples, observem como ficaria:

SQL
REGEXP_REPLACE(C1, '^(\d{3})(\d{3})(\d{3})(\d{2})

Observem que substituímos a utilização de quatro funções SUBSTR por uma única REGEXP_REPLACE, o que mudou foi como formatamos a saída.

Praticando
Para a prática, preparei o seguinte ambiente para exemplificação.

SQL
SQL> create table t1 (cpf varchar2(11));
SQL> insert into t1 values('12345678901');
SQL> insert into t1 values('12345678911');
SQL> insert into t1 values('12345678921');
SQL> insert into t1 values('12345678931');
SQL> insert into t1 values('12345678941');
SQL> insert into t1 values('12345678951');
SQL> insert into t1 values('12345678961');
SQL> insert into t1 values('12345678971');
SQL> insert into t1 values('12345678981');
SQL> insert into t1 values('12345678991');
SQL> commit;

Testando a utilização do regexp

SQL
SQL> select regexp_replace(cpf, '^(\d{3})(\d{3})(\d{3})(\d{2})

Observem como funcionam os argumentos utilizados:

SQL
regexp_replace(COLUNA, 'BUSCA', 'RESULTADO')
COLUNA : Coluna da tabela
BUSCA: Expressão regular para busca
^..: Indica início do registro
$..: Indica o final do registro
().: Cria um marcador
\d.: Dígitos (números)
{}.: Quantidade de caracteres
(\d{3})..: Marcador de 3 números (exemplo dado)
(\d{2})..: Marcador de 2 números (exemplo dado)
RESULTADO: Como será o resultado da substituição
\1..: Primeiro marcador, e assim por diante para cada () da busca

O marcador mostra onde aparecerá cada campo, um exemplo simples é efetuar a seguinte alteração no regexp para melhorar um pouco o entendimento:

SQL
SQL> select regexp_replace(cpf, '^(\d{3})(\d{3})(\d{3})(\d{2})

Observem que o dígito verificador do CPF ficou na frente, e assim podemos redefenir como a saída do regexp poderá sair de formas diferentes com pequenas alterações no código.

Esse pequeno exemplo mostra um pouco do que o regexp pode fazer.

Espero ter ajudado.

Marcos Braga

Marcos Braga

Pós-graduação em Computação Forense e Perícia Digital, pós-graduação em Redes de Computadores e com graduação em Tecnologia em Processamento de Dados.

Comentário(s) da Comunidade

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

plugins premium WordPress