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

标签 sql sql-server t-sql 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

最佳答案

只需一点数学知识... 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

结果

SomeCol NewValue
4.4160  4.50
2.7500  2.75
5.8340  5.75
7.0830  7.00

关于sql - 如何在 SQL 中以 0.25 增量执行自定义回合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74708973/

相关文章:

SQL 填充 2 周时间表的日历日期

sql - Postgres - 如何对窗口函数列的每 x 行求和?

c# - C# 应用程序中的 SQL 过滤器和或语句

mysql - 插入一个新的数据库条目是否比先检查该条目是否存在更快?

sql-server - 使用 SSIS DatFlowTask 将数据从 SQL Server 导出到 Excel 时如何避免 'number stored as text' 错误

sql - 如何使用一个 SQL 查询从数据库中删除所有外部表?

SQL Where Column1 = Column1 将只返回非空值

c# - SQL Server 2000 连接错误 - 登录前握手?

sql - T-SQL:如何执行此操作:select * from xy where uid in (@parameter)

SQL Server : how to get data from lowest hierarchy in hierarchy table?