Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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
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.
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!