Настройка округления десятичного значения в SQL Server

У меня есть список значений в SQL Server, которые нуждаются в некотором индивидуальном округлении. Я пытался использовать встроенные функции SQL Server, но эти функции не работали.

Я хочу округлить десятичное значение до ближайшего 5 значения

Например

  • 1.02,1.01,1.03,1.04,1.05 -- округлить до 1.05
  • 1.06,1.07,1.08,1.09,1.10 -- округлить до 1.10
  • 1.11,1.12,1.13,1.14,1.15 -- округлить до 1.15
  • 1.16,1.17,1.18,1.19,1.20 -- округлить до 1.20

Не могли бы вы предложить рабочее решение для этого сценария в SQL Server?

заранее спасибо

Раджу


person VRaju    schedule 22.08.2020    source источник


Ответы (1)


Собираетесь ли вы иметь дело только с двумя десятичными цифрами?

Если это так, вы можете использовать такую ​​​​функцию:

CREATE FUNCTION dbo.RoundToFive(@Input DECIMAL(16,2))
RETURNS DECIMAL(16,2)
AS
BEGIN
    RETURN ROUND(@Input*20 + 0.49, 0) / 20.0;
END;

Если вы используете это так:

DECLARE @data TABLE (StartValue DECIMAL(16,2))

INSERT INTO @data (StartValue) 
VALUES (1.00), (1.02), (1.01), (1.03), (1.04), (1.05), (1.06)

SELECT StartValue, dbo.RoundToFive(StartValue)
FROM @data

вы получите такой вывод:

введите здесь описание изображения

person marc_s    schedule 22.08.2020
comment
Большое спасибо, Marc_S. Кажется, это решение работает :). Не могли бы вы дать какое-нибудь простое объяснение этой части ROUND(@Input*20 + 0.49, 0) / 20.0, это было бы полезно для меня и других :) - person VRaju; 22.08.2020
comment
@VRaju: подход ROUND(... * 20;0) / 20.0 в основном округляет любую сумму с точностью до 0.05 (например, 5 центов в валюте). Но это не то, что вы хотите - у вас немного перекошено округление - 1,01 и 1,02 нужно округлить до 1,05 - и это то, что достигается частью + 0.49 - person marc_s; 22.08.2020