Descobrir se valor do campo é somente letra

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
pyro
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 323
Registrado em: Qui, 21 Set 2006 10:21 am
Localização: Barala - TT

Pessoal, existe uma maneira mais funcional para descobrir se o conteúdo de um varchar2 é composto somente de letras?
Pensei em limpar caracteres especiais e números com o replace() e depois medir o tamanho da variável e comparar com o tamanho original, se for diferente é porque tinha "lixo".
Mas fazer dessa forma me parece muito mecânico, alguém já desenvolveu algo mais funcional?
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

você pode dar um to_number e esperar uma exceção
pyro
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 323
Registrado em: Qui, 21 Set 2006 10:21 am
Localização: Barala - TT

Certo, nesse caso resolve, mas e quando eu precisar validar se veio somente números?
burga
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Qui, 26 Nov 2009 1:05 pm
Localização: SP
Ricardo H. Tajiri

Oi pyro,

No 10g/11g você consegue localizar os registros que possuem SOMENTE LETRAS usando REGEXP_LIKE.

Selecionar tudo

WITH tabela AS (
  SELECT 'aaS123Iiouh' campo FROM DUAL
  UNION ALL
  SELECT 'aaSadsUIiouh' FROM DUAL
  UNION ALL
  SELECT 'aaSAAAIiouh' FROM DUAL
  UNION ALL
  SELECT '00' FROM DUAL
  UNION ALL
  SELECT '123a' FROM DUAL
  UNION ALL
  SELECT '' FROM DUAL)
SELECT campo 
FROM tabela 
WHERE REGEXP_LIKE(campo,'^[[:alpha:]]+$');
Vou deixar de lição de casa o retorno de registros que só possuem número... A mudança é mínima neste código e até meio óbvia... :wink:
Responder
  • Informação