João Fernandes dos Santos 2 Report post Posted October 6, 2011 Pessoal, bom dia. Estou tentando realizar esse cálculo no SQL: ******************************************************* ----CALCULO NA MATEMATICA ----- NUMERO DE ENTRADA: 1 2 3 4 SEQUÊNCIA DE MULTIPLICADORES: 5 4 3 2 RESULTADO: 5+8+9+8 = 30 ******************************************************* só que minha função abaixo esta me retornando 17, teria que me retornar 30, não estou conseguindo achar onde estou errando, alguém poderia me dar uma luz? --**** FUNÇÃO PARA REALIZAR O CÓDIGO ACIMA **** -- NUMERO DE ENTRADA -- DECLARE @NovoCodUsual NVARCHAR(50) SET @NovoCodUsual = 1234 --- PEGO O TAMANHO DO NÚMERO DE ENTRADA--- DECLARE @TamanhoDoCodigoSemDigito INTEGER SET @TamanhoDoCodigoSemDigito = LEN(@NovoCodUsual) -- CRIO UMA VARIÁVEL SOMATÓRIO --- DECLARE @Soma INTEGER SET @Soma = 0 --CRIO UM MULTIPLICADOR --- DECLARE @Multiplicador INTEGER SET @Multiplicador = 2 --CRIO UMA VARIÁVEL PARA FAZER O CALULO ATÉ O TAMANHO DO NUMERO DE ENTRADA -- DECLARE @i integer SET @i = 1 --REALIZO O WHILE WHILE @i < @TamanhoDoCodigoSemDigito BEGIN SET @Soma = @Soma + (LEFT(RIGHT(@NovoCodUsual, @i),1) * @Multiplicador) SET @TamanhoDoCodigoSemDigito = @TamanhoDoCodigoSemDigito - 1 SET @Multiplicador = @Multiplicador + 1 SET @i = @i + 1 END SELECT @Soma Share this post Link to post Share on other sites
eriva_br 7 Report post Posted October 6, 2011 vendo por cima, parece que o problema esta no seu loop, pois esta utilizado a variável @TamanhoDoCodigoSemDigito para controla-lo e dentro esta decrementando o valor dela em -1, crie uma variável auxiliar para utilizar dentro do loop e tb. um erro de lógica no while, pois tem que acrescentar mais 1 para o loop ser executado 4 vezes WHILE @i < @TamanhoDoCodigoSemDigito + 1 talvez seja só isso, ou talvez tenha outros ajustes, ou ainda pode ter outras soluções.. boa sorte! Share this post Link to post Share on other sites
João Fernandes dos Santos 2 Report post Posted October 10, 2011 Pessoal, consegui resolver. O Erro estava na variável @TamanhoDoCodigoSemDigito como disse o eriva, mais também tive que mudar a condição do while acrescentando o <= vejam como ficou meu While: WHILE @i <= @TamanhoDoCodigoSemDigito BEGIN SET @Soma = @Soma + (LEFT(RIGHT(@NovoCodUsual, @i),1) * @Multiplicador) SET @Multiplicador = @Multiplicador + 1 SET @i = @i + 1 END SELECT @Soma Valeu eriva. Podem encerrar. Share this post Link to post Share on other sites