2014-04-09 66 views

回答

0

因爲您投射的除數不是結果。你還沒有指定精度。

例如參見此:

SELECT 50/CAST(100 AS decimal(3)) 
     ,50/CAST(100 AS decimal(6,3)) 
     ,CAST (50/CAST(100 AS decimal(3)) AS decimal(3)) 
     ,CAST (50/CAST(100 AS decimal(3)) AS decimal(6,3)) 

Precision, Scale, and Length (Transact-SQL)

精度是在多個位數。比例是數字中小數點右側的 數字的數量。例如, 數123.45具有5位精度和2.

DECIMAL比例使用18的默認精度和規模3.

因此,當你情況DECIMAL(3)你得到一個DECIMAL(3,0)。然後,您將它用作除數,並且SQL Server按照其規則生成規則。

Operation Result precision      Result scale 
e1/e2 p1 - s1 + s2 + max(6, s1 + p2 + 1) max(6, s1 + p2 + 1) 
+0

謝謝,卡爾。我通過投射除數得到了這一部分。但爲什麼查詢結果是.500000,而不是.5,.500,默認的18位數或其他? – user3516067

+0

太棒了!謝謝。解釋得很好。 – user3516067