- Este tópico contém 16 respostas, 6 vozes e foi atualizado pela última vez 16 anos, 4 meses atrás por
facc.
-
AutorPosts
-
20 de julho de 2009 às 7:18 pm #88016
facc
ParticipanteBom 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 string20 de julho de 2009 às 7:31 pm #88018Regis Araujo
ParticipanteOla 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…
20 de julho de 2009 às 8:09 pm #88021Leonardo Litz
ParticipanteOlá 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
20 de julho de 2009 às 8:51 pm #88029facc
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
21 de julho de 2009 às 5:39 pm #88039facc
Participantebom 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]
21 de julho de 2009 às 6:19 pm #88040rwarstat
ParticipanteFacc,
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 dualAbraço,
Roberto21 de julho de 2009 às 6:30 pm #88042Rodrigo 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
21 de julho de 2009 às 6:32 pm #88043Marcio68Almeida
ParticipanteVocê 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
21 de julho de 2009 às 6:40 pm #88044facc
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 (
21 de julho de 2009 às 6:44 pm #88045Rodrigo Mesquita
ParticipanteA sua String vai ser sempre deste tamanho?
980014@003|980020@001
21 de julho de 2009 às 6:47 pm #88047Marcio68Almeida
ParticipanteNa 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
21 de julho de 2009 às 6:51 pm #88048facc
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.
21 de julho de 2009 às 6:56 pm #88049Rodrigo Mesquita
ParticipanteEntã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.
21 de julho de 2009 às 7:00 pm #88051facc
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.
21 de julho de 2009 às 7:31 pm #88055Rodrigo Mesquita
Participantefaç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; -
AutorPosts
- Você deve fazer login para responder a este tópico.