2014-09-05 69 views
0

我有:誤差變換VARCHAR轉換成int

when 
    nazev like '%xxxx%' 
     then 
      cast(convert(int,(isnull(RealEstateTax_Suma,0)/5/1.2)) as varchar(8)) + ' m2' 

,這讓我誤差變換將varchar值 '0 M2' 爲數據類型int時

轉換失敗。

但我想我不會將結果轉換爲int或我?

結果應該25 m2

+0

「CASE」表達式的其餘部分如何顯示?因爲它從'result_expressions'中的類型集合和可選的'else_result_expression'中返回最高優先級類型。 http://msdn.microsoft.com/en-us/library/ms181765.aspx – NickyvV 2014-09-05 11:27:54

+4

更好地顯示整個查詢。 – 2014-09-05 12:57:02

+0

通常當發生這種情況是因爲查詢中的某處你正在搞亂整數,導致你的查詢嘗試返回一個整數la @NickyvV – Jake 2014-09-05 13:28:08

回答

0

可以請你試試這個...

cast((convert(int,ISNULL(RealEstateTax_Suma,0))/5/1.2) as varchar(8)) + ' m2' 
0

您還沒有上市的整個查詢,但我的猜測是,你case語句混合的結果類型。

例如:

case 
    when nazev like '%xxxx%' then 
     cast(convert(int,(isnull(@RealEstateTax_Suma,0)/5/1.2)) as varchar(8)) + ' m2' 
    else 0 
end as Col1 

第一殼體返回VARCHAR,在else返回int。最終結果將根據數據類型優先級嘗試轉換爲int。

MSDN: Data Type Precedence

當操作者結合不同的數據類型的兩個表達式,對於數據類型的優先級的 規則指定與 低優先級的數據類型被轉換爲數據類型具有較高 優先。如果轉換不是支持的隱式轉換,則返回錯誤 。當兩個操作數表達式具有相同的數據類型 時,操作結果具有該數據類型。

相關問題