- Este tópico contém 7 respostas, 3 vozes e foi atualizado pela última vez 15 anos, 1 mês atrás por
facc.
-
AutorPosts
-
18 de janeiro de 2011 às 10:54 pm #97785
facc
ParticipanteBoa 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?
19 de janeiro de 2011 às 1:04 am #97789burga
ParticipanteAinda 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…
19 de janeiro de 2011 às 2:33 pm #97790facc
ParticipanteVamos 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.
19 de janeiro de 2011 às 3:00 pm #97791leandrolbs
Participanteexpressã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;19 de janeiro de 2011 às 3:04 pm #97792leandrolbs
Participanteops, implementei aqui..
select replace(0 ||substr(3701,1,3) || (substr(3701,3,3) / 100),',',null) from dual;acho que me embananei, é isso que quer..?
19 de janeiro de 2011 às 4:15 pm #97795burga
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,
19 de janeiro de 2011 às 4:25 pm #97797facc
ParticipanteHoje está assim
Loja + CodVendedor
01…………01
37…………01Quero que fique assim
Loja + CodVendedor
001………….001
037………….00120 de janeiro de 2011 às 4:23 pm #97861facc
ParticipanteConsegui 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.
-
AutorPosts
- Você deve fazer login para responder a este tópico.