Contar caracter específico

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
Pablo
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 190
Registrado em: Sex, 27 Out 2006 11:12 am
Localização: 88350000
Pablo

Bom dia turma...
Preciso contar 1 determinado caracter em uma palavra... não estou falando instr
Exe.: preciso saber quantos "a" tem na palavra "abracadabra"....neste caso me retornando 5

abraços
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother,

Como o tópico está em PL/SQL, segue uma dica:

Selecionar tudo



declare
  vContador       pls_integer   := 0;
  vString         varchar2(100) := 'abracadabra';
  vCaracterContar char(1)       := 'B';
begin
  --
  for x in 1..length(vString)
  loop
    --
    if ( substr(vString,x,1) = vCaracterContar or 
        upper(substr(vString,x,1)) = vCaracterContar )
    then
      vContador := vContador + 1;
    end if;
  end loop;
  --
  dbms_output.put_line(vContador);
  --
end;  
Em SQL provavelmente o faça com expressão regular, porém, para tal o bd tem que ser 10g.
Qualquer coisa, manda pra gente.

Abraço,
Pablo
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 190
Registrado em: Sex, 27 Out 2006 11:12 am
Localização: 88350000
Pablo

Awww beleza...muito obrigado,,,mas,,já fiz um loop assim....somente queria saber se existe alguma função do oracle que fizesse isso...

Obrigado

t+
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother,

Alguma função pronta, creio que não tem não (específica pra isso).
Mas, se for em SQL ainda, dá pra fazer tb algo do tipo:

Selecionar tudo

 
--
select (length('abracadabra') - length(replace('abracadabra', 'a')))
  from dual;
--
abraço,
Pablo
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 190
Registrado em: Sex, 27 Out 2006 11:12 am
Localização: 88350000
Pablo

awww...beleza ...muito obrigado...pensei q existia alguma função do oracle..

falow
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Opa,
Existe a função de expressão regular que creio resolver teu problema(para versão 11 do banco).
REGEXP_COUNT(<string>, <padrão>[[, <posição_inicial>], [<parâmetro de comparação>]])

-- parâmetro de comparação:
'c' = case sensitive
'i' = case insensitive search
'm' = treats the source string as multiple lines
'n' = allows the period (.) wild character to match newline
'x' = ignore whitespace characters
Tentaí:

Selecionar tudo

SELECT REGEXP_COUNT('abracadabra','a',1,'i')
FROM dual;
Pablo
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 190
Registrado em: Sex, 27 Out 2006 11:12 am
Localização: 88350000
Pablo

Opa...obrigado Daniel....mas meu banco é 10...heheh...mas,,,vou deixar anotado q quando for feita a migração vou usar...rsrsrs

falow
Responder
  • Informação
  • Quem está online

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