Neste artigo, vamos mostrar 3 exemplos de como utilizar a função REGEXP_REPLACE para formatar CEP.
Veja qual a forma é mais simples para você, eu considero a do 3º exemplo.
1º Exemplo
Para formatar o CEP vamos utilizar a tabela "tb_endereco", exibida na imagem a seguir:
Solução
Observe que na função REGEXP_REPLACE:
- Utilizamos parenteses "( )" para separar cada parte da string, neste caso o CEP;
- Utilizamos colchetes "[ ]" para indicar quais os caracteres que iremos utilizar em cada parte, neste caso utilizamos caracteres numéricos de "0" até "9", representados pela expressão 0-9;
- Indicamos dentro das chaves "{}" a quantidade de dígitos que vamos utilizar;
- Utilizamos contra-barra "\" antes de cada parte criada;
Após a execução da sentença, teremos o seguinte resultado:
2º Exemplo
Podemos substituir a expressão "0-9" que indica a utilização de caracteres numéricos de 0 até 9, pela expressão "[:digit:]". O resultado será o mesmo.
Solução
Após a execução da sentença, teremos o seguinte resultado:
3º Exemplo
Para facilitar, podemos substituir a expressão "[[:digit:]]" que indica a utilização de caracteres numéricos de 0 até 9, pela expressão abreviada "\d". O resultado será o mesmo.
Solução
Após a execução da sentença, teremos o seguinte resultado:
Gostou? Siga no Google + ou Facebook.
Consegui formatar o CEP aqui.
ResponderExcluirObrigado.
show, valeu
ResponderExcluirValeu!!! Me ajudou bastante!!
ResponderExcluirIsso altera de forma permanete?
ResponderExcluirObsevação o comando SELECT...REGEXP_REPLACE… não altera os dados da coluna “cep” da tabela “tb_endereco”.
ExcluirEste comando permite apenas visualizar o dado em um formato diferente, neste caso, "nnnnn-nnn".
Caso queira alterar o dado que está gravado na tabela você deve utilizar o comando update.
Importante, a coluna cep deve ser do tipo varchar:
/*Este comando atualiza os dados da coluna cep
de nnnnnnnn para nnnnn-nnn*/
UPDATE tb_endereco SET cep = REGEXP_REPLACE (cep, '(\d{5})(\d{3})', '\1-\2')
WHERE
true = ALL
(
SELECT
cep SIMILAR TO '([0-9]{8})'
FROM
tb_endereco
);
/*O filtro (WHERE) verifica se todos os dados da coluna cep possuem exatamente 8 dígitos de 0 a 9,
se houver pelo menos 1 cep fora deste padrão
nenhum registro será atualizado
caso contrário todos os registros da coluna cep serão atualizado.
*/
Segue abaixo o comando para verificar se há CEPS fora do padrão, caso precise:
/*Comando para verificar cep fora do formato nnnnnnnn*/
SELECT
cep
FROM
tb_endereco
WHERE
cep NOT SIMILAR TO '([0-9]{8})'
Valeu! Precisei apenas fazer um CAST, porque minha tabela armazena o cep como integer
ResponderExcluirex:regexp_replace(cast (e2.cep as varchar), '(\d{5})(\d{3})', '\1-\2') as "CEP"