2016-12-06 55 views
1

我試圖乘以兩個值。一個是小數,一個是數字。SQL查詢乘以十進制

實例 - 總就是我想:

Number Decimal Total 
900  1.111 999.9 
800  1.25  1000 
460  4.25  1955 

在我的SQL查詢,我已嘗試以下步驟:

(ISNUMERIC(UpgradeEmptyNodesPercentageLimitForAllocation) * RawTotalNodes) as ExpectedEmptyNodeCountForUpgrade 

然而,它總是返回數。以上是如何做的?

謝謝...

+0

您當前的輸出是什麼? – phil652

+0

如果UpgradeEmptyNodesPercentageLimitForAllocation的計算結果爲有效數字數據類型,則ISNUMERIC函數返回1,否則爲什麼您將該函數的結果與RawTotalNodes相乘 – domenicr

+0

我的意思是更改UpgradeEmptyNodesPercentageLimitForAllocation應該是Decimal和RawTotalNodes = Number。 當我刪除I​​SNUMERIC ......我得到轉換******值「******」爲數據類型******當 轉換失敗。 – emie

回答

0

檢查您的數據類型的規模,如果是零,則SQL將刪除小數

DECLARE @d1 DECIMAL(18,0) = 1.111 
DECLARE @d2 DECIMAL(18,10) = 1.111 


SELECT @d1,@d2 
0

ISNUMERIC真是評估字符串,而不是數字類型 - 和它只返回01。我認爲你想要做的是將你的數字和/或小數值的CAST更精確到一個,然後乘。影響操作的因素是存儲的操作的兩個因素的精確度和規模。

這些類型,按名稱,其實都是可以互換 - 但精度和規模都沒有。

嘗試鑄造既一些acceptabe精度和規模NUMERIC,然後乘以。或者,如果您沒有精確度和刻度總是有效的話,那麼投射到REAL,如果這是個選項。

Read more on MSDN