SQL智能舍入需要帮助

时间:2012-07-17 21:05:50

标签: sql tsql rounding

我有一个任务是使用带有以下规则的sql游标转换(舍入)小数(带有2位小数)

如果第二个十进制数字是:

a)0,1,2然后我必须把它变成0。

b)3,4,5,6,7然后我必须把它变成5。

c)8,9然后我必须把它变成0(并在第一个十进制数字中加1)。

该操作包含许多需要使用这些规则转换的记录和值。我正在使用Microsoft SQL Server数据库。

你能建议我一个聪明的sql,它可以实现这些规则吗?

提前Thanx!

2 个答案:

答案 0 :(得分:2)

SELECT ROUND(<column>*2, 1)/2

答案 1 :(得分:0)

您的问题有点复杂,但您不想使用游标。

update t
    set val = (case when floor(num*100)%10 in (0, 1, 2)
                    then (floor(num*100) - floor(num*100)%10)/100.0
                    when floor(num*100)%10 in (3, 4, 5, 6, 7)
                    then (floor(num*100) - floor(num*100)%10)/100.0 + 0.05
                    when floor(num*100)%10 in (8, 9)
                    then (floor(num*100) - floor(num*100)%10)/100.0 + 0.1 
               end)

您可以通过将案例放在select语句中来查看值。