Округление до ближайшего 5 в SQL Server - PullRequest
12 голосов
/ 09 ноября 2009

В моей таблице SQL Server 2008 есть столбец Money. В моем следующем вопросе, как я могу округлить его до ближайшего 5 $

select FineAmount from tickets

Спасибо

Ответы [ 7 ]

25 голосов
/ 09 ноября 2009
select round(FineAmount*2,-1)/2 from tickets

или поместить предложение nicholaides в sql

select round(FineAmount/5,0)*5 from tickets

В примере предполагается, что FineAmount имеет тип money. Второй подход, вероятно, лучше, так как первый работает с лимитом Maximum_value_of_money_type / 2

Подробнее о КРУГЛЫЙ

15 голосов
/ 09 ноября 2009

Общее математическое решение:

Разделите на 5, округлите до ближайшего целого, затем умножьте на 5.

3 голосов
/ 08 января 2016

Если вы хотите усечь (округлить) до группировки 5, используйте функцию по модулю; в Microsoft SQL Server это %

т.е.: field1 - (field1% 5)

Если бы у вас было field1 == 3, то вычислилось бы:

3 - (3% 5) = 0

если бы это было 13:

13 - (13% 5) = 10

Просто добавьте 5, если хотите округлить

См. Также «MOD» не является распознанным именем встроенной функции

0 голосов
/ 13 декабря 2018

Округление до следующего большего 5

(CAST(@Amount/5 AS INT) + IIF(CAST(ROUND(@Amount,0) AS INT) % 5>1,1,0))*5)
0 голосов
/ 07 сентября 2016

Мое первое решение было

create function dbo.udf_RoundToNearest(@x int, @to int)
returns int
with schemabinding as begin
return @to * convert(int, round(convert(float, @x) / convert(float, @to), 0))
end

Это работает, но MSSQL считается «неточным», поскольку оно использует числа с плавающей запятой внутри. Это останавливает его использование в индексированных представлениях. Вместо этого вы можете выполнять работу только с целочисленной арифметикой:

create function dbo.udf_RoundToNearest(@x int, @to int)
returns int
with schemabinding as begin

declare @m int
set @m = abs(@x) % abs(@to)

declare @trunc int
set @trunc = abs(@x) - @m

declare @r int
set @r = case when @m * 2 >= abs(@to) then @trunc + abs(@to) else @trunc end

return case when @x < 0 then -@r else @r end

end
0 голосов
/ 20 января 2015
DECLARE @Amount DECIMAL(18,3) ; SET @Amount = 7818.32

SELECT(Round((@Amount-CAST(@Amount AS INT))*100 /5,0)*5 /100) 
      + CAST( @Amount AS INT)

- вы получите 7818.30

0 голосов
/ 09 ноября 2009

Использовать функцию ROUND

    SELECT  ROUND(FineAmount,5)
    FROM    tickets
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...