sábado, 20 de março de 2010

Como extrair números de uma String de Caracteres

Bem pessoal,
Estes dias recebi esta dica de um amigo e achei muito interessante. Às vezes você precisa, dentro de um programa, extrair tudo que é número de uma string de caracteres e acha que para isto é necessário fazer um PL. Veja no exemplo abaixo, que com um simples SELECT foi possível fazer isto através do comando TRANSLATE.

select  translate(endereco, '1234567890', ' ') so_letras
       ,ltrim(translate(endereco, translate(endereco, '1234567890', ' ') , ' ')) so_numeros
from   (select '65 HG5IS 258 KS34 LKJ4 AS 21DF G AÇ K43 ' endereco
        from dual)


O comando TRANSLATE, pra quem não lembra, tem o objetivo de substituir ocorrências de um determinado conjunto, com relação a um segundo conjunto de caracteres. E é isso que acontece neste exemplo. Note que, na primeira coluna do SELECT o comando substitui tudo que é número, varrendo cada caracter da string contida na coluna ENDERECO, por espaço em branco. Com isto temos o resultado mostrando apenas os caracteres que não são números. Depois aplicamos novamente o comando TRANSLATE em cima deste resultado, mas agora, substituindo tudo que não é numérico, também por espaços em branco. No resultado final você tem números de um lado e os caracteres que não são números de outro.

É isso.
Abraço!

Um comentário: