Question mark

Eliminando caracteres estranhos – Expressões regulares – ORACLE

CompartilheShare on FacebookTweet about this on TwitterShare on RedditFlattr the authorShare on Google+Email this to someone

Essa dica é simples mas pode ajudar,  e além disso pode deixar sua query mais limpa caso precise de algo parecido.

Só para ficar mais claro vamos primeiro dizer o que significa expressões regulares:

Expressões Regulares (ERs ou do inglês abreviado regex – regular expression)  provê uma forma eficiente de identificar e manusear cadeias de caracteres de interesse, como caracteres particulares, sequências alfanuméricas, padrões numéricos, etc…

Enfim, um dia desses eu estava confeccionando uma procedure onde era necessário importar dados de uma planilha Excel. Mas me deu um erro teoricamente misterioso. Um campo numérico estava vindo com um fantasmagórico caractere estranho. E era estranho mesmo, pois a olho nu não dava para perceber nada.

Era um espaço que ficou dentro da célula do excel e essa célula deveria carregar apenas números.

Enfim segue a resolução do problema:

INSERT INTO TABELA_EXEMPLO (CAMPO1, CAMPO2, CAMPO3, CAMPO4, CAMPO5)  VALUES (regexp_replace(rec.valornumerioco, ‘[^0-9]’), valor2, valor3, valor4, valor5);

A expressão regexp_replace(rec.processo, ‘[^0-9]’)  eliminou todos os caracteres que não sejam numéricos.

Se usarmos  regexp_replace(rec.processo, ‘ [a-zA-Z]’)  funcionará da mesma forma.

Olha assim:

  1. SELECT regexp_replace(‘alkashl1231231ik2h1l24hl1ih412  asd1321′, ‘[^0-9]’) “só números”,
  2.               regexp_replace(‘alkashl12312aA31ik2h1l24hl1ih412z  as1231′, ‘[^a-zA-Z]’) “só letras”
  3.              FROM dual

Simples mas eficiente!

Abaixo uma tabela com alguns metacarcteres:

Metacaracter

Função

Exemplo

Escape

corresponde a

^

Posição inicial da Linha(String)

^A corresponde a que se deseje as strings que se iniciem com A

$

Posição final da Linha(String)

$B corresponde a que se deseje as strings que terminem com B

[ ]

Lista

[abc] a string  deve conter qualquer dos caracteres da lista

.

Qualquer caractere

Funciona como um “coringa” trazendo qualquer resultado, por exemplo: n.o trará qualquer resultado  como não ou nao

{n}

Número de caracteres

|

Alternativa (similar a ou)

Alternativa de padrão de busca, por exemplo (‘joão’|’maria’)

 O padrão POSIX possui também classes pré-definidas que podem ser utilizados com ([ ]) – brackets. Temos como exemplos: [[:lower]], [[:digit]]  entre outros, veja relação a seguir:

 Classe POSIX               Tratamento idêntico                   Significa

 [:alnum:]                       [A-Za-z0-9]                               Caracteres Alfanuméricos

[:alpha:]                         [A-Z a-z]                                   Maiúsculas/Minúsculas

[:cntrl:]                         –                                              Caracteres de controle 

[:digit:]                         [0-9]                                         Números

[:lower:]                      [a-z]                                         Caracteres Minúsculos

[:punct:]                       [.,!?:;]                                       Sinais de pontuação

[:space:]                     [rnrfv]                             Caracteres brancos

[:upper:]                       [A-Z]                                        Caracteres Maiúsculos

 


Comments

comments

Deixe uma resposta