Est-il possible d'arrondir facilement une figure en haut à 100 près (ou 1000, 500, 200, etc.) dans SQL Server?
Alors:
720 -> 800
790 -> 800
1401 -> 1500
Ce qui suit devrait fonctionner. Après avoir lu votre question, je ne sais pas exactement ce que vous voulez que 100 revienne. Pour cela 100 retours 100.
select floor((X + 99) / 100) * 100;
Cela donne les résultats suivants:
0 -> 0
1 -> 100
99 -> 100
100 -> 100
101 -> 200
Pour arrondir au millier le plus proche, essayez ce qui suit: -
select round(YourValue, -3)
À votre santé!!!!!
Une option serait d’utiliser la fonction CEILING () comme ceci:
SELECT CEILING(@value/100.0) * 100
Vous devrez peut-être convertir votre valeur en décimal d’abord en fonction de son type.
Utilisez la fonction CEILING pour arrondir un chiffre
DECLARE @Number DECIMAL, @RoundUp DECIMAL
SET @RoundUp = 100
SET @Number = 720
SELECT CEILING(@Number/@RoundUp)*@RoundUp
Essaye ça:
sélectionner round (@value, -2);
Aucune fonction native ne le fera, mais plusieurs astuces mathématiques simples le feront. Un exemple:
DECLARE @Foo int
SET @Foo = 720
print @Foo
print (@Foo + 100) % 100
PRINT @Foo - (@Foo + 100) % 100
Vous pouvez utiliser ce code, en supposant que votre amount
est un entier. Sinon, vous aurez besoin de lancer, de sorte que vous obtenez la division entière.
If amount % 100 != 0 Then
roundedAmount = ((amount / 100) * 100) + 100
Else
roundedAmount = amount
Vous voudrez peut-être regrouper cela dans une fonction définie par l'utilisateur .
Une solution générique - Utilisez MOD pour trouver la 100ème place, puis ajoutez 100 au résultat.
select (720 - MOD(720,100)) + 100 from dual;
Si vous avez besoin de la 80ème place suivante, remplacez simplement "100" par "80".
En plus de Gray's answer, .__, j'utiliserais la fonction inline suivante:
CREATE FUNCTION dbo.udf_RoundNearest
(
@Number bigint,
@RoundNearest bigint,
@Direction int
)
RETURNS TABLE AS
RETURN
SELECT CASE WHEN @RoundNearest>=@Number THEN @Number
ELSE
(
(@Number + CASE
WHEN @Direction = 0 --Round Down
THEN 0
ELSE CASE WHEN @Number % @RoundNearest = 0 THEN 0 ELSE @RoundNearest END
END) / @RoundNearest) * @RoundNearest
END Number
Paramètre Définition:
en utilisant la fonction:
SELECT * FROM dbo.udf_RoundNearest (1965,100,1) --> 2000
SELECT * FROM dbo.udf_RoundNearest (1359,100,0) --> 1300
SELECT * FROM dbo.udf_RoundNearest (1999,10,0) --1990
SELECT * FROM dbo.udf_RoundNearest (80,100,0) --> 80 (if the @number parameter is less or equal the @RoundNearest parameter the result will be the @number itself
il peut également être utilisé tel qu’il s’applique à un tableau .__, tel que:
;with tmp (Value) as
(select 1236 union all select 6584 union all select 9999)
select t.*, fn.Number
from tmp t
cross apply dbo.udf_RoundNearest (Value,100,0) fn
/*Result Set
Value Number
1236 1200
6584 6500
9999 9900*/
Il est très simple d’arrondir un nombre à n’importe quel multiple de 10 près en utilisant simplement la fonction ROUND
.
SELECT ROUND(number/1000,2)*1000
Cela vous donnera la valeur millième la plus proche.