如何在 SQL 中以 0.25 增量执行自定义回合?

Dr.*_*rog 2 sql t-sql sql-server rounding

我正在尝试在 SQL 中创建一个自定义舍入,以 0.25 向上或向下舍入,但我不确定这是否真的可能与我想要完成的任务有关。
我已经尝试过 ROUND 语句,但似乎您只能指定将数字四舍五入到的小数位数...我在这里可能是错的,但正在寻找一些指导。

四舍五入应遵循以下规则:

首先检查:

  • 如果小数点后的值在 0.00 和 0.25 之间:

  • 如果小数点后的值大于或等于 0.125,则四舍五入到 0.25

  • 如果小数点后的值小于 0.125,则向下舍入为 .00

  • 如果小数点后的值在 0.25 和 0.50 之间:

  • 如果小数点后的值大于或等于 0.375,则四舍五入到 0.50

  • 如果小数点后的值小于 0.375,则向下舍入至 0.25

  • 如果小数点后的值在 0.50 到 0.75 之间:

  • 如果小数点后的值大于或等于 0.625,则四舍五入到 0.75

  • 如果值小于 0.625,则向下舍入至 0.50

  • 如果小数点后的值在 0.75 和 0.99 之间:

  • 如果小数点后的值大于或等于 0.875,则四舍五入为整数

  • 如果小数点后的值小于 0.875,则向下舍入至 0.75

因此 所有 值要么是
X.00 X.25 X.50 X.75


例如,
4.416应向上舍入为4.50
2.75仍为2.75
5.834应向下舍入为5.75
7.083应向下舍入为7.00

Joh*_*tti 5

只需一点数学知识...convert(decimal(10,2),...)是可选的

Declare @YourTable Table ([SomeCol] decimal(10,4))  Insert Into @YourTable Values 
 (4.416)
,(2.75)
,(5.834)
,(7.083)
 
Select *
      ,NewValue = convert(decimal(10,2),round(SomeCol/.25,0)*.25)
 From @YourTable
Run Code Online (Sandbox Code Playgroud)

结果

SomeCol NewValue
4.4160  4.50
2.7500  2.75
5.8340  5.75
7.0830  7.00
Run Code Online (Sandbox Code Playgroud)