有人可以解释以下sql代码中会发生什么吗?
声明@dividend numeric(38,22)
声明@divisor numeric(38,22)
声明@otherDivisor int
设置@dividend = 1
设置@divisor = 3
设置@otherDivisor = 3
选择演员表(@dividend / @divisor作为数字(38,22)),@ dividend / @otherDivisor
返回的结果是
0.3333330000000000000000 0.3333333333333333333333
我希望两次计算都能得到相同的结果。
答案 0 :(得分:0)
其实我回答了这个问题。看起来SQL似乎将结果强制转换为具有更高优先级,被除数或除数的结果。
select 1.00000000000000000000/3.0
select 1.0/3.0
答案 1 :(得分:0)
试试这个:
select cast(@dividend as numeric(38,22)) / @divisor, @dividend / @otherDivisor
你在分裂后正在施展。
答案 2 :(得分:0)
decimal(38,22)/ decimal(38,22)以these rules后面的小数(x,6)结束
所以你在回到十进制(38,22)之前有0.33333
@otherDivisor被强制转换为(38,0)并保持为十进制(x,22)
查看我的工作example