我有一个任务是使用带有以下规则的sql游标转换(舍入)小数(带有2位小数)
如果第二个十进制数字是:
a)0,1,2然后我必须把它变成0。
b)3,4,5,6,7然后我必须把它变成5。
c)8,9然后我必须把它变成0(并在第一个十进制数字中加1)。
该操作包含许多需要使用这些规则转换的记录和值。我正在使用Microsoft SQL Server数据库。
你能建议我一个聪明的sql,它可以实现这些规则吗?
提前Thanx!
答案 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语句中来查看值。