2011-07-27 224 views
-1

我做錯了什麼?有沒有更好的方法做到這一點,打破長度和字符串並將其轉換爲數值?我越來越varchar數值錯誤?

UPDATE VF_CasINV_Cost 
    SET TotWgt = CASE 
     WHEN (Dimension like '%x%') THEN 
     (cast(left(Dimension, charindex('X', Dimension, 1) - 1) as numeric)) * 
     (cast(substring(Dimension, 1 + charindex('X', Dimension, 1), len(Dimension)) as numeric))/144.00 

     WHEN TotWgt = 0 and [Wt/Ft] > 0 THEN (Dimension * [Wt/Ft]) * [Count] 
     WHEN TotWgt = 0 and [Wt/Sht] > 0 THEN ((Dimension * [Wt/Sht])/100) * [Count] 
     WHEN TotWgt = 0 and [Wt/Pc] > 0 THEN ((Dimension * [Wt/Pc])/100) * [Count] 
     ELSE TotWgt 
    END --TotWgt, Item#, TotWgt, [Wt/Ft], [Wt/Sht], [Wt/Pc], [Count], Dimension, TotWgt 
FROM VF_CasINV_Cost 
WHERE (CalendarYear = 2010) AND (Item# = Item#) AND (ID = ID) AND (Item# < 99999990) 
AND K = 'K' AND D = '' AND C = '' AND (Unit = 'cwt' OR Unit = 'cwts') 
+2

你有GOT來簡化它。我們不知道你的模式是什麼樣的,正在處理什麼文本字符串等等。 – n8wrl

+1

你應該提供一個表格模式,以便明確哪一種類型的列是 – sll

回答

0

我會做一些假設:Dimension是一個varchar字段;你試圖從這個varchar字段中解析出數值,並在計算中使用它。 如果是這樣,你的問題是最後三個WHEN情況:你在乘法運算中使用Dimension而不投射它。所以SQL無法在varchar字段上執行乘法運算。

+0

當他們很容易看到時,它似乎他們是最難找到的 。謝謝!當TotWgt = 0並且[Wt/Ft]> 0 THEN(cast(尺寸爲數值)* [Wt/Ft])* [Count] 當TotWgt = 0並且[Wt/Sht] >(0)[(cast(尺寸爲數值)* [Wt/Sht])/ 100)* [Count] 當TotWgt = 0並且[Wt/Pc]> 0 THEN/Pc])/ 100)* [Count] 但我仍然得到varchar數值錯誤? – user823893

+0

如果維度與「d1782」類似,您將得到該錯誤。你必須從字符串解析數字值,然後執行轉換 – Dimitri