2014-09-02 184 views
0

我正在處理類型爲decimal(18,4)的列上執行某種除法操作的SQL查詢,並且應該返回值爲decimal但由於某些原因,它是給我一個錯誤將varchar值645.00轉換爲數據類型int時出現轉換失敗int

Conversion failed when converting the varchar value 645.00 to data type int 

我不做任何轉換的值,但我不知道爲什麼這是試圖將其轉換爲int。

我的查詢部分如下

CASE WHEN co.RequestID IS NOT NULL THEN cd.ConsDetQty/1000 WHEN nis.[867_key] IS NOT NULL 
         THEN q.Quantity/1000 ELSE q2.Quantity/1000 END AS 'Quantity' 

我想知道如果我錯了地方?

+0

什麼領域,cd.ConsDetQty,q.Quantity和q2.Quantity的數據類型? – mxix 2014-09-02 14:16:27

回答

0

你的case語句是:

(CASE WHEN co.RequestID IS NOT NULL 
     THEN cd.ConsDetQty/1000 
     WHEN nis.[867_key] IS NOT NULL 
     THEN q.Quantity/1000 
     ELSE q2.Quantity/1000 
END) AS Quantity 

爲使該代碼生成這樣的錯誤,cd.ConsDetQtyq.Quantity,或q2.Quantity存儲爲一個字符串,而不是一個數字。您應該修復該列,但可以通過執行快速修復查詢:

(CASE WHEN co.RequestID IS NOT NULL 
      THEN cd.ConsDetQty/1000.0 
      WHEN nis.[867_key] IS NOT NULL 
      THEN q.Quantity/1000.0 
      ELSE q2.Quantity/1000.0 
    END) AS Quantity 

這是一個「快速和骯髒」的修復程序。我不建議在實際代碼中進行隱式轉換。更好地做到:

(CASE WHEN co.RequestID IS NOT NULL 
      THEN cast(cd.ConsDetQty as float)/1000.0 
      WHEN nis.[867_key] IS NOT NULL 
      THEN cast(q.Quantity as float)/1000.0 
      ELSE cast(q2.Quantity as float)/1000.0 
    END) AS Quantity 
+0

我不想將它轉換爲整數 – DoIt 2014-09-02 14:59:25

+0

然後刪除最後一個'cast()'。 SQL Server執行整數除法,所以它看起來像你想在結果中的整數。 – 2014-09-02 15:00:28

+0

它給我一個算術溢出錯誤,將varchar轉換爲數字 – DoIt 2014-09-02 15:06:38

0

試試這個

CASE WHEN co.RequestID IS NOT NULL THEN CONVERT(DECIMAL(18,4),cd.ConsDetQty)/1000 
     WHEN nis.[867_key] IS NOT NULL THEN CONVERT(DECIMIAL(18,4),q.Quantity/1000 
     ELSE CONVERT(DECIMAL(18,4),q2.Quantity)/1000 
    END AS 'Quantity' 
相關問題