将varchar转换为int时出错

时间:2014-09-05 11:07:18

标签: sql sql-server tsql

我有:

  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

2 个答案:

答案 0 :(得分:0)

你可以试试这个......

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

答案 1 :(得分: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

  

当一个运算符组合了两个不同数据类型的表达式时,   数据类型优先级的规则指定具有的数据类型   较低的优先级转换为具有较高的数据类型   优先。如果转换不是受支持的隐式转换,   返回错误。当两个操作数表达式具有相同的数据时   类型,操作的结果具有该数据类型。