Pular para o conteúdo
Visualizando 4 posts - 1 até 4 (de 4 do total)
  • Autor
    Posts
  • #74528
    Avatar de jr_kleinjr_klein
    Participante

      Algu?m sabe me dizer se existe alguma fun??o para contar quantas vezes um determinado caractere aparece em uma string.

      Ex.

      ‘Teste de contagem’ o caractere ‘ ‘ aparece 2 vezes….

      Obrigado,
      M?rio R. Klein Jr.

      #74955
      Avatar de toadpunktoadpunk
      Participante

        Eu n?o cheguei a testar t?!? Fiz baseado no seu problema!!

        A? vai:

        Primeiro voc? cria uma procedure assim:

        --RETORNA QUANTAS VEZES FIND_TXT APARECE DENTRO DE SEQ_TXT

        PROCEDURE CONTA_CHAR(SEQ_TXT IN VARCHAR2, FIND_TXT IN VARCHAR2) IS

        V_NUMBER NUMBER;
        TAM NUMBER;
        POS NUMBER;

        BEGIN

        V_NUMBER := 0; POS := 0;
        TAM := LENGTH(SEQ_TXT);
        IF TAM > 0 THEN

        LOOP
        POS := INSTR(SEQ_TXT,FIND_TXT,POS + 1);

            IF POS > 0 THEN
               V_NUMBER := V_NUMBER + 1;
            ELSE
               EXIT;
            END IF;
        

        END LOOP;

        END IF;
        RETURN V_NUMBER;
        END;

        E…usando seu exemplo:

        DECLARE
        QUANTIDADE NUMBER;

        BEGIN

        QUANTIDADE := CONTA_CHAR('Teste de contagem',' ');

        END;

        A VARI?VEL QUANTIDADE SER? = 2

        BEM COMO SE TEMOS AS VARI?VEIS:

        NOME = ‘GRUPO DE PROFISSIONAIS’
        ID = ‘SS’

        PODEMOS APLICAR:

        QUANTIDADE := CONTA_CHAR(NOME,ID);

        A VARI?VEL QUANTIDADE DEVE SER = 1

        ESPERO TER AJUDADO.

        ABRA?OS.

        #74962
        Avatar de toadpunktoadpunk
        Participante

          Voc? cria a seguinte fun??o:


          --RETORNA QUANTAS VEZES FIND_TXT APARECE DENTRO DE SEQ_TXT

          FUNCTION CONTA_CHAR(SEQ_TXT IN VARCHAR2, FIND_TXT IN VARCHAR2) RETURN NUMBER IS

          V_NUMBER NUMBER;
          TAM NUMBER;
          POS NUMBER;

          BEGIN

          V_NUMBER := 0; POS := 0;
          TAM := LENGTH(SEQ_TXT);
          IF TAM > 0 THEN

          LOOP
          POS := INSTR(SEQ_TXT,FIND_TXT,POS + 1);

              IF POS > 0 THEN
                 V_NUMBER := V_NUMBER + 1;
              ELSE
                 EXIT;
              END IF;
          

          END LOOP;

          END IF;
          RETURN V_NUMBER;
          END;

          E pode aplicar assim, por exemplo:

          :block.resultado := to_char(conta_char(:block.nome,:block.nomefind));

          Eu n?o tinha testado. Agora sim, e t? corrigido.
          Abra?os.

          #74963
          Avatar de toadpunktoadpunk
          Participante

            S? melhorando um pouco…

            --RETORNA QUANTAS VEZES FIND_TXT APARECE DENTRO DE SEQ_TXT

            FUNCTION CONTA_CHAR(SEQ_TXT IN VARCHAR2, FIND_TXT IN VARCHAR2) RETURN NUMBER IS

            V_NUMBER NUMBER;
            POS NUMBER;
            FIND VARCHAR2;

            BEGIN

            V_NUMBER := 0; POS := 0;

            IF FIND_TXT IS NULL THEN
            FIND := ' ';
            ELSE
            FIND := FIND_TXT;
            END IF;

            LOOP
            POS := INSTR(SEQ_TXT,FIND,POS + 1);
            IF POS > 0 THEN
            V_NUMBER := V_NUMBER + 1;
            ELSE
            EXIT;
            END IF;
            END LOOP;

            RETURN V_NUMBER;
            END;

          Visualizando 4 posts - 1 até 4 (de 4 do total)
          • Você deve fazer login para responder a este tópico.
          plugins premium WordPress