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

      Boa tarde a todos

      Solicitaram a seguinte coisa para mim

      Mudar de 3700 para 037000

      Explicando melhor: Preciso mudar um campo que possui atualmente 4 digitos para 6 digitos, porém tem algumas particularidades. Se fosse apenas aumentar a quantidade na tabela, consigo resolver com Alter Table.

      * Exemplo: o valor 3701 deve se transformar em 037001
      o valor 0101 deve se transformar em 001001
      Sendo os 3 primeiros digitos o numero da Filial e os ultimos 3, o número da função do funcionário.

      Alguem poderia me dar uma luz de como resolver isso de forma simples?

      #97789
      burga
      Participante

        Ainda não ficou claro o que você quer pelos seus exemplos, então vou postar 2 respostas, uma pra cada possibilidade:

        caso o numero 1111 tenha que ficar 011101, então:

        UPDATE tabela SET numero = REGEXP_REPLACE(LPAD(numero,5,'0'),'(.*)([[:digit:]]{1})$','102');

        caso o numero 1111 tenha que ficar 011011, então:

        UPDATE tabela SET numero = REGEXP_REPLACE(LPAD(numero,5,'0'),'(.*)([[:digit:]]{2})$','102');

        Se o seu banco não for o 10g/11g, então faça com SUBSTR…

        #97790
        facc
        Participante

          Vamos ver se consigo me expressar melhor

          No primeiro passo, irei mudar a estrutura da tabela, mas os dados novos iram vir no formato novo (037001) e os que já estão gravados estão no antigo (3701), preciso mudar, pois esse campo é utilizado para gerar as comissões dos vendedores.

          Porque preciso dessa alteração? Para poder aumentar a capacidade de lojas, onde hoje o limite é 99 (estamos com 86!!), mudando para 3 digitos, passaremos a 999, mas para isso, a numeração dos vendedores deverá acompanhar.

          Imagine daqui a algum tempo, no caso da 3701, vai retornar erro quando chegarmos nas 370 lojas (Utopia? Pode ser…) mas já estamos bem proximos da loja 100, então o vendedor 1001 (loja 10) vai conflitar com o da loja 100.

          Irei testar essas instruções.

          #97791
          leandrolbs
          Participante

            expressão regular deve operar melhor que o substr, mais pode parecer complicado, montei um substr aqui veja se é isso.

            select 0 ||substr(3701,1,3) || 000 ||substr(3701,3,3)from dual;

            #97792
            leandrolbs
            Participante

              ops, implementei aqui..

              select replace(0 ||substr(3701,1,3) || (substr(3701,3,3) / 100),',',null) from dual;

              acho que me embananei, é isso que quer..?

              #97795
              burga
              Participante

                [quote=”facc”:2o3vhffa]Vamos ver se consigo me expressar melhor

                No primeiro passo, irei mudar a estrutura da tabela, mas os dados novos iram vir no formato novo (037001) e os que já estão gravados estão no antigo (3701), preciso mudar, pois esse campo é utilizado para gerar as comissões dos vendedores.

                Porque preciso dessa alteração? Para poder aumentar a capacidade de lojas, onde hoje o limite é 99 (estamos com 86!!), mudando para 3 digitos, passaremos a 999, mas para isso, a numeração dos vendedores deverá acompanhar.

                Imagine daqui a algum tempo, no caso da 3701, vai retornar erro quando chegarmos nas 370 lojas (Utopia? Pode ser…) mas já estamos bem proximos da loja 100, então o vendedor 1001 (loja 10) vai conflitar com o da loja 100.

                Irei testar essas instruções.[/quote]

                Oi facc,

                O que eu quis dizer que não ficou claro é a posição onde um dos 0 (zero) entraria, você colocou 2 exemplos (0101 e 3701) que você quer como retorno 001001 e 037001. Então entre os dois 1’s do primeiro exemplo e entre o 7 e o 3 do segundo exemplo entrou mais um zero. A dúvida que ficou foi, qual dos dois zeros de cada exemplo é o inserido? Porque isso faz a diferença…

                Mas pelo que você disse, agora eu deduzo que o primeiro zero tenha sido inserido, então, das opções que eu coloquei, a segunda é a que vai te atender corretamente.

                Abraços,

                #97797
                facc
                Participante

                  Hoje está assim

                  Loja + CodVendedor
                  01…………01
                  37…………01

                  Quero que fique assim

                  Loja + CodVendedor
                  001………….001
                  037………….001

                  #97861
                  facc
                  Participante

                    Consegui resolver com a seguinte instrução do burga

                    UPDATE tabela SET numero = REGEXP_REPLACE(LPAD(numero,5,'0'),'(.*)([[:digit:]]{2})$','102');

                    muito obrigado a todos.

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