偶爾發現SQL Server中除法運算結果總是為0的現象,之所以稱為現象,而不稱為BUG,是因為實際上的運算結果並不是錯誤的。
來看一個具體的例子:
SELECT 500/520; -- 0
通過這個例子可以看出來,語句的執行結果是0。這是因為SQL Server會自動根據除數與被除數的最大精度去對運算結果取精度,這里的除數和被除數都是整數,所以得到的結果也是整數。
來驗證一下這個結論:
SELECT 500.0/520; -- 0.961538
SELECT 500/520.0; -- 0.961538
通過上面的驗證可以看出來,只要除數與被除數之中有一個是小數,得到的結果也會是小數。
這樣的話,在SQL Server中除法運算中如果出現結果總是為0的現象,不用慌,只要知道了原因,就可以簡單通過以下技巧來解決:
SELECT (500 + 0.0)/520; -- 0.961538
技巧就是給除數或被除數加上一個0的小數,結果就有精度了,也就不會總是為0了。
"死亡就像是水消失在水里,幾乎不引起一絲波瀾。"