web-dev-qa-db-fra.com

Arrondissez * UP * à la centaine près dans SQL Server

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

33
joshcomley

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
44
Gray

Pour arrondir au millier le plus proche, essayez ce qui suit: -

select round(YourValue, -3)

À votre santé!!!!!

23
rkgit

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.

14
krock

Utilisez la fonction CEILING pour arrondir un chiffre

DECLARE @Number DECIMAL, @RoundUp DECIMAL
SET @RoundUp = 100
SET @Number = 720
SELECT CEILING(@Number/@RoundUp)*@RoundUp
7
Shri

Essaye ça:

sélectionner round (@value, -2);

1
Saumya

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
0
Philip Kelley

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 .

0
C. Ross

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".

0
Shaulian

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:

  1. @Number - le nombre que vous devez arrondir
  2. @RoundNearest 10ème, 100ème, 1000ème etc 
  3. @Direction 0-> round _ {down, 1-> round up

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*/
0
hkravitz

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.

0
Sanjeet