Testar campo varchar2

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
marlonpasquali
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 248
Registrado em: Sex, 06 Fev 2009 3:02 pm
Localização: ERECHIM - RS

Galera,
Tenho uma coluna na tabela que é um varchar2. Preciso fazer um Join desta coluna com outra tabela. Mas só posso fazer o Join se esta coluna contiver números. não pode ter letras ou outros simbolos. Tem alguma funçao para testar se uma coluna da tabela contém somente números ??

obrigado,
Marlon
fabioing
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 12
Registrado em: Qui, 12 Mar 2009 9:51 pm
Localização: Curitiba - PR

Marlon,

Existe um conjunto de instruções chamado Expressões Regulares, dentro dessas funções existe uma chamada regexp_instr que, provavelmente, atenda à sua necessidade.

Creio que você poderia usar algo do tipo: regpexp_instr(COLUNA,'[^[:digit:]]') = 0.

Essa função é uma extensão da instrução instr e no exemplo que te passei irá retornar a primeira posição de qualquer caracter não numérico. Se a coluna que você quer testar possuir algum caracter diferente de número irá retornar um valor diferente de zero.

Não sei se consegui te exemplificar.

Qualquer dúvida estou à disposição.

Um abraço,

Fabio
marlonpasquali
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 248
Registrado em: Sex, 06 Fev 2009 3:02 pm
Localização: ERECHIM - RS

Perfeito Fábio. Era exatamente isso que precisava. Funcionou.

só pra exemplificar o que eu fiz:

SELECT regexp_instr(INTERFACE_HEADER_ATTRIBUTE1,'[^[:digit:]]') FROM RA_CUSTOMER_TRX_ALL WHERE CUSTOMER_TRX_ID = 160967

muito obrigado pela dica.

forte abraço !!!

Marlon
Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

Cara, mais ou menos isso também, mas pelo q entendi se você só pode fazer o join, joga essa expressão regular no "where" dessa forma

Selecionar tudo

Conectado a:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> set serveroutput on
SQL> with tab1 as (
  2      select '123A' col_teste from dual
  3      union select '999' from dual
  4      union select '55.583,39' from dual
  5      union select '100.53' from dual
  6      union select '100,53' from dual
  7      union select 'palavra 222' from dual
  8      union select 'abc' from dual)
  9    select t.col_teste
 10      from tab1 t 
 11     where regexp_like(t.col_teste, '^\d*[.,0-9]*\d*$')
 12  /

COL_TESTE
-----------
100,53
100.53
55.583,39
999

SQL> 
Com essa expressão regular ali você pega também pontos e vírgulas se existirem, o que é bem provável dado que é uma string.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 24 visitantes