Sql server 2012 在SQL Server中自定义舍入十进制值

Sql server 2012 在SQL Server中自定义舍入十进制值,sql-server-2012,rounding,ceil,Sql Server 2012,Rounding,Ceil,我有一个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中

我有一个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中的此方案提供一个可行的解决方案吗

提前谢谢


拉朱

你只会处理两个小数位吗

如果是这样,您可以使用如下函数:

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
如果您这样使用:

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
您将得到如下输出:

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

您是否只处理两个十进制数字

如果是这样,您可以使用如下函数:

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
如果您这样使用:

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
您将得到如下输出:

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

非常感谢Marc_S,这个解决方案似乎很有效:)。你能简单解释一下这个部分吗?“轮(@Input*20+0.49,0)/20.0”这对我和其他人都会有帮助:)@VRaju:the
轮(…*20;0)/20.0
方法基本上可以将任何金额轮成
0.05
(例如,一种货币中的5美分)。但这不是你想要的-你有一个稍微倾斜的舍入-1.01和1.02需要舍入到1.05-这就是
+0.49
部分achieves@VRaju:如果你觉得这个答案帮助你解决了问题,那么请。这将表达你对那些花自己时间帮助你的人的感激之情。非常感谢Marc_S,这个解决方案似乎奏效了:)。你能简单解释一下这个部分吗?“轮(@Input*20+0.49,0)/20.0”这对我和其他人都会有帮助:)@VRaju:the
轮(…*20;0)/20.0
方法基本上可以将任何金额轮成
0.05
(例如,一种货币中的5美分)。但这不是你想要的-你有一个稍微倾斜的舍入-1.01和1.02需要舍入到1.05-这就是
+0.49
部分achieves@VRaju:如果你觉得这个答案帮助你解决了问题,那么请。这将表达你对那些花自己的时间帮助你的人的感激之情。