T-SQL:四舍五入

时间:2017-10-05 14:01:33

标签: sql-server tsql rounding

在我输出服务合约时数的报告中,我需要将合约时间缩短。

目前我从Navision获得了“合同时间”字段。我在这几个小时内增加了10%(公司政策),这导致我们可以用几个小时向该客户开账单。

然而,通过这样做,我得到了非常奇怪的合同时间(10.04,28.82,9.57,...) 现在有一个想法,我们将这些数字四舍五入为.25,.50,.75或.00 但它需要总是围捕。

10.04应该导致10.25

28.82应该导致29.00

9.57应该导致9.75

我通过ROUND(@value/25,2)*25尝试了这一点,但这并没有给我必要的结果。

  • 10.04变为10(当我期望10.25时)
  • 28.82变为28.75(当我期待29.00时)
  • 9.57变为9.50(当我期望9.75时)

有人可以给我一些关于如何处理这个问题的额外提示吗?

1 个答案:

答案 0 :(得分:4)

您可以使用CEILING功能代替ROUND,它会"向上"你的数字如果在另外两个人之间,即使他们是更接近"到较小的数字。

你的整体逻辑将转向"季度"看起来不错,但是ROUND功能会选择最接近的功能,而不是"下一个更大的功能"。

另外,您可以使用第二个参数进行回合以满足您的需求,但是您不能使用天花板,因此您必须更改一些数字。

所以,在你的情况下:

CEILING(@value * 4) / 4

应该这样做。

编辑(感谢@HABO):

如果您处理负数,请注意,这仍将围绕向上-10.3将成为-10.25)。如果你需要在这种情况下向下舍入以使它看起来像是正面(即-10.3-10.5),你可以使用这种变化处理这两种情况:

SIGN(@value) * CEILING(ABS(@value) * 4) / 4

其他注意事项:

  • 要将向下舍入到上一季度,只需将CEILING替换为FLOOR