我的任务是使用具有以下规则的 sql 游标来转换(四舍五入)小数(带有 2 个小数位)
如果第二个十进制数字是:
a)0,1,2 然后我必须把它变成 0。
b)3,4,5,6,7 然后我必须把它变成 5。
c)8,9 然后我必须将其变为 0(并在第一个十进制数字中添加 1)。
该操作包含许多需要使用这些规则转换的记录和值。我正在使用 Microsoft SQL Server 数据库。
你能建议我一个可以实现这些规则的智能 sql 吗?
提前谢谢!
SELECT ROUND(<column>*2, 1)/2
您的问题有点复杂,但您不想使用光标。
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)
您可以通过将 case 放在 select 语句中来查看值。