0

您好,我来自波斯尼亚和黑塞哥维那,在我们县,最小的钞票是 0.05,现在政府推动我们将重试价格四舍五入为 0.05 或 0.00。因此,我想创建 SQL Scalar Valued Function 来四舍五入给定值的价格。是否有一些内置解决方案,以便我可以节省查询资源。谢谢你的建议最好的问候

从评论编辑:

  • 0,1,2,3,4 归零
  • 5,6,7,8,9 归零+1
4

2 回答 2

4

没有内置任何东西 - 但它很容易创建:

编辑:适应您的特殊舍入需求:-)

create function dbo.RoundToFiveOrZero(@inputValue MONEY)
returns MONEY
as begin
  return FLOOR((@inputValue + 0.05) * 20.0) / 20.0
end

使用 DECIMAL 或 MONEY 数据类型 - 最适合您的。

像这样使用它:

select 
    dbo.RoundToFiveOrZero(1.51),
    dbo.RoundToFiveOrZero(1.53),
    dbo.RoundToFiveOrZero(7.33),
    dbo.RoundToFiveOrZero(7.37),
    dbo.RoundToFiveOrZero(7.39)

结果是 1.50、1.50、7.30、7.40、7.40。

马克

于 2009-04-15T16:54:27.217 回答
2

感谢 marc_s,我更改为 money 数据类型。

float vs decimal vs money 数据类型文章和流程图

ALTER FUNCTION dbo.ufnRound (@number money)
RETURNS money
AS
BEGIN
    RETURN FLOOR(@number*20) / 20
END
GO
SELECT dbo.ufnRound (1.22), dbo.ufnRound (1.23), dbo.ufnRound (1.27), dbo.ufnRound (1.28)

-- gives    1.2    1.2   1.25   1.25
于 2009-04-15T16:55:29.727 回答