Infelizmente, o máximo que obtive das funções do SQL Server foi um arredondamento para cima, dado um número de casas decimais. O comando abaixo foi utilizado:
1: SELECT ROUND(2.1234,1) AS ValorArredondado1
2: SELECT ROUND(2.1234,2) AS ValorArredondado2
3: SELECT ROUND(2.1234,3) AS ValorArredondado3
4: SELECT ROUND(2.1234,4) AS ValorArredondado4
Observe o resultado:
ValorArredondado1
---------------------------------------
2.1000
ValorArredondado2
---------------------------------------
2.1200
ValorArredondado3
---------------------------------------
2.1230
ValorArredondado4
---------------------------------------
2.1234
---------------------------------------
2.1000
ValorArredondado2
---------------------------------------
2.1200
ValorArredondado3
---------------------------------------
2.1230
ValorArredondado4
---------------------------------------
2.1234
Mas esse não é o resultado esperado, era necessário que o valor arredondado fosse obrigatoriamente o próximo múltiplo de um número (intervalo) passado como parâmetro.
Como não encontrei nada parecido nas funções de sistema do SQL Server, implementei a função abaixo para resolver o problema.
1: CREATE FUNCTION fn_ArredondaIntervalo
2: (
3: @Valor DECIMAL(18,2)
4: ,@Intervalo DECIMAL(18,2)
5: )
6: RETURNS DECIMAL(18,2)
7: AS
8: BEGIN
9: RETURN CEILING(@Valor / @Intervalo) * @Intervalo
12: END
13: GO
Para executá-la, deve-se utilizar chamadas como as do exemplo abaixo:
1: SELECT dbo.fn_ArredIntervalo(2.1234,.1) AS V1
2: SELECT dbo.fn_ArredondaIntervalo(2.1234,.25) AS V2
3: SELECT dbo.fn_ArredondaIntervalo(2.1234,.5) AS V3
4: SELECT dbo.fn_ArredondaIntervalo(2.1234,1) AS V4
Veja o resultado da execução:
V1 --------------------------------------- 2.20 V2 --------------------------------------- 2.25 V3 --------------------------------------- 2.50 V4 --------------------------------------- 3.00
Dessa forma, obtive o resultado esperado. No resultado acima, o número 2,1234 foi arredondado para o próximo múltiplo de 0,1 (em V1), próximo múltiplo de 0,25 (em V2) e assim por diante.
Até a próxima!
2 comentários:
Ótima dica, estava com este mesmo problema, precisa arredondar para cima, mesmo que o final fosse menor que 5.
valeu
shooooow
Postar um comentário