Pular para o conteúdo
Visualizando 15 posts - 1 até 15 (de 17 do total)
  • Autor
    Posts
  • #88016
    facc
    Participante

      Bom dia a todos, venho mais uma vez pedir a ajuda a vocês.

      Sempre usei o Substr para copiar partes de uma string e jogar para um campo. Mas essa função necessita de um inicio e um final, e qndo não tenho o final? como devo fazer?

      ex.
      Minha string é composta de 16 caracteres iniciais + @ (separador) + numeros finais (não tenho o tamanho final). Será certo jogar algum valor grande para essa funcão?

      String: 1234567890123456@12345678

      Função:
      Var2 := Substr(Variavel, 1, 16) -> Primeira parte da string (1234567890123456)
      Var3 := Substr(Variavel, 17, ??) -> Segunda parte da string

      #88018
      Avatar photoRegis Araujo
      Participante

        Ola amigo, boa tarde..!

        Faz assim, crie uma variável NUMBER.. como exemplo abaixo.

        iTamanho Number := 0;

        iTamanho := length(Valor_Da_String);

        Var3 := Substr(Variavel, 17,iTamanho) -> Segunda parte da string

        Assim vc vai pegar a string da posição 17 até o final dela.. ou se preferir.. pegar apenas o tamanho que falta.. faz assim..

        iTamanho Number := 0;

        iTamanho := length(Valor_Da_String);

        Var3 := Substr(Variavel, 17,iTamanho-16) -> Segunda parte da string

        Abraços.. Espero ter ajudado…

        #88021
        Avatar photoLeonardo Litz
        Participante

          Olá Facc

          Utilize assim:


          select substr('1234567890123456@12345678',1,16),
          substr('1234567890123456@12345678',17)
          from dual;

          Onde o segundo parametro do substr é “apartir de”.
          E o terceiro é “até”.

          Quando vc não passa o terceiro parametro, ele identifica que é até o fim da string.

          Vlw Leonardo Litz

          #88029
          facc
          Participante

            [quote=”Litz”:255k90lg]Olá Facc

            Utilize assim:


            select substr('1234567890123456@12345678',1,16),
            substr('1234567890123456@12345678',17)
            from dual;

            Onde o segundo parametro do substr é “apartir de”.
            E o terceiro é “até”.

            Quando vc não passa o terceiro parametro, ele identifica que é até o fim da string.

            Vlw Leonardo Litz[/quote]

            Muito obrigado. Funcionou perfeitamente!

            []’s

            #88039
            facc
            Participante

              bom dia,

              Venho novamente com uma duvida semelhante a desse tópico. Ele funcionou perfeitamente para uma string. Agora que eu descobri que o sistema irá me enviar uma string nesse formato:

              980014@003|980020@001

              As posições são fixas, sempre 6 antes do @ e 3 antes do |

              Como faço para pegar, separado cada parte da string e “jogar” em uma clausula de SELECT?[/b]

              #88040
              rwarstat
              Participante

                Facc,
                Tenta dessa maneira.

                select substr(‘980014@003|980020@001’, 1, 6), substr(‘980014@003|980020@001’, 8, 3),
                substr(‘980014@003|980020@001’, 12, 6), substr(‘980014@003|980020@001’, 19, 3)
                from dual

                Abraço,
                Roberto

                #88042
                Rodrigo Mesquita
                Participante

                  [quote=”facc”:2u0d219u]bom dia,

                  Venho novamente com uma duvida semelhante a desse tópico. Ele funcionou perfeitamente para uma string. Agora que eu descobri que o sistema irá me enviar uma string nesse formato:

                  980014@003|980020@001

                  As posições são fixas, sempre 6 antes do @ e 3 antes do |

                  Como faço para pegar, separado cada parte da string e “jogar” em uma clausula de SELECT?[/b][/quote]

                  Acredito que é isso que vc quer

                  Select Trim(Substr(&Vstring, 1, Instr(Upper(&Vstring), ‘@’) – 1)) “COLUNA 1”,
                  Trim(Substr(&Vstring,
                  Instr(Upper(&Vstring), ‘@’) + 1,
                  Length(&Vstring) – Instr(Upper(&Vstring), ‘@’) –
                  Instr(Upper(Reverse(&Vstring)), ‘|’))) “COLUNA 2”

                  From Dual;

                  abraço

                  Rodrigo Mesquita

                  #88043
                  Marcio68Almeida
                  Participante

                    Você pode criar varios substrings
                    Essa certamente não é a forma mais elegante de se fazer esse trabalho.
                    Select Substr (var, 1, 6) var1, Substr (var, 8, 3) var2, Substr (var, 12, 6) var3, Substr (var, 19) var4 From Dual
                    Você pode utilizar delimitadores, assim contemplará as situações com valores de tamanhos diferentes…
                    Select Substr (var, 1, instr (var '@') - 1) var1, Substr (var, instr (var, '@') +1, instr (var, '|') - instr (var, '@') - 1 ) var2, Substr (var, instr (var, '|') + 1, instr (Substr (var, instr (var, '|') + 1), '@') - 1 ) var3, Substr (Substr (var, instr (var, '|') + 1), instr (var, '@') + 1) var4 From dual

                    #88044
                    facc
                    Participante

                      [quote=”Marcio68Almeida”:1on6k1bh]Você pode criar varios substrings
                      Essa certamente não é a forma mais elegante de se fazer esse trabalho.

                      Select Substr (var, 1, instr (var '@') - 1) var1, Substr (var, instr (var, '@') +1, instr (var, '|') - instr (var, '@') - 1 ) var2, Substr (var, instr (var, '|') + 1, instr (Substr (var, instr (var, '|') + 1), '@') - 1 ) var3, Substr (Substr (var, instr (var, '|') + 1), instr (var, '@') + 1) var4 From dual
                      [/quote]

                      tentei esse ultimo, mas deu erro que falta um (

                      #88045
                      Rodrigo Mesquita
                      Participante

                        A sua String vai ser sempre deste tamanho?

                        980014@003|980020@001

                        #88047
                        Marcio68Almeida
                        Participante

                          Na verdade faltou uma vírgula que acabei apagando por engano quando estava substituindo as strings por variáveis…
                          Select Substr (:var, 1, instr (:var, '@') - 1) var1, Substr (:var, instr (:var, '@') +1, instr (:var, '|') - instr (:var, '@') - 1 ) var2, Substr (:var, instr (:var, '|') + 1, instr (Substr (:var, instr (:var, '|') + 1), '@') - 1 ) var3, Substr (Substr (:var, instr (:var, '|') + 1), instr (:var, '@') + 1) var4 From dual

                          #88048
                          facc
                          Participante

                            [quote=”RodrigoMesquita”:o44j0fht]A sua String vai ser sempre deste tamanho?

                            980014@003|980020@001[/quote]

                            Sim, a principio vai ser, porém já estão estudando em aumentar a quantidade de venda dos produtos, podendo chegar a 10 produtos na mesma string.

                            explicando um pouco a composição dessa variavel.

                            Antes do @ é o código do produto, após é a quantidade solicitada. Usei o PIPE (|) para separar as solicitações.

                            #88049
                            Rodrigo Mesquita
                            Participante

                              Então vai ser complicado vc colocar num select simples, o ideal seria que fosse dentro de um bloco pl/sql para que vc verifique o tamanho(length) da string para decidir quantas veses vc vai “cortar” a string para ter os seus valores.

                              O ideal é que vc corte no | para diferenciar os produtos e depois corte no @ para diferenciar o código e a quantidade.

                              #88051
                              facc
                              Participante

                                [quote=”RodrigoMesquita”:5uxg42ow]Então vai ser complicado vc colocar num select simples, o ideal seria que fosse dentro de um bloco pl/sql para que vc verifique o tamanho(length) da string para decidir quantas veses vc vai “cortar” a string para ter os seus valores.

                                O ideal é que vc corte no | para diferenciar os produtos e depois corte no @ para diferenciar o código e a quantidade.[/quote]

                                Acho que não expliquei… Ele está em uma procedure. Falei do SELECT pois é nele que necessito usar.

                                Desculpe, acho que me expressei mal.

                                #88055
                                Rodrigo Mesquita
                                Participante

                                  faça entao assim

                                  Declare
                                  vTamString Number;
                                  vCodProduto Number;
                                  vQtdProduto Number;
                                  vStrProd Varchar2(11);
                                  Begin
                                  vTamString := Length(:vString||’|’)/11;

                                  For i In 1..vTamString Loop
                                  vStrProd := substr(:vString,1,11);
                                  vCodProduto := substr(vStrProd,1,6);
                                  vQtdProduto := substr(vStrProd,8,3);

                                  /* aqui vc executa o procedimento que deseja para esse produto */

                                  :vString := substr(:vString,12,length(:vString));
                                  End Loop;
                                  End;

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