Подтвердить что ты не робот

Round * UP * до ближайшего 100 в SQL Server

Можно ли легко округлить фигуру вверх до ближайших 100 (или 1000, 500, 200 и т.д.) в SQL Server?

Итак:

720 → 800
790 → 800
1401 → 1500

4b9b3361

Ответ 1

Следующее должно работать. После прочтения вашего вопроса я не совсем уверен, что вы хотите вернуть. Для этого 100 возвращает 100.

select floor((X + 99) / 100) * 100;

Это дает следующие результаты:

0 -> 0
1 -> 100
99 -> 100
100 -> 100
101 -> 200

Ответ 2

Для округления До ближайшей тысячи, попробуйте следующее: -

select round(YourValue, -3)

Ура!!!!!

Ответ 3

Один из вариантов заключается в использовании функции CEILING():

SELECT CEILING(@value/100.0) * 100

Вам может потребоваться преобразовать ваше значение в десятичную в начале в зависимости от его типа.

Ответ 4

Используйте функцию ПОТОЛКА для округления фигуры вверх

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

Ответ 5

Попробуйте следующее:

выберите round (@value, -2);

Ответ 6

Там нет встроенной функции, которая будет делать это, но есть множество простых математических приемов, которые будут. Пример:

DECLARE @Foo int
SET @Foo = 720

print @Foo
print (@Foo + 100) % 100
PRINT @Foo - (@Foo + 100) % 100

Ответ 7

Вы можете использовать этот код, если ваш amount является int. Если нет, вам нужно будет выполнить бросок, чтобы получить целочисленное деление.

If amount % 100 != 0 Then
   roundedAmount = ((amount / 100) * 100) + 100
Else
   roundedAmount = amount

Возможно, вы захотите упаковать его в пользовательскую функцию.

Ответ 8

Общее решение. Используйте MOD, чтобы найти последнее 100-е место, а затем добавьте 100 к результату.

select (720 - MOD(720,100)) + 100 from dual;

Если вам нужно следующее 80-е место, просто замените "100" на "80".

Ответ 9

Очень просто округлить число до любого кратного ближайшего 10, просто используя функцию ROUND для ex:

SELECT ROUND(number/1000,2)*1000 

Это даст вам ближайшее тысячное значение.

Ответ 10

В дополнение к ответу Серый, Я бы использовал следующую встроенную функцию:

CREATE FUNCTION dbo.udf_RoundNearest
(
@Number bigint,
@RoundNearest bigint,
@Direction int
)

RETURNS TABLE AS 
RETURN

SELECT CASE WHEN @RoundNearest>[email protected] 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

Определение параметра:

  • @Number - число, необходимое для округления
  • @RoundNearest 10, 100, 1000th и т.д.
  • @Направление 0- > круглый вниз, 1- > округлить

с помощью функции:

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

он также может использоваться как применимый к таблице например:

;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*/