日期:2014-05-17  浏览次数:20627 次

语句为什么出错? select case when 结果='8' then cast(结果 as int)+1 else 结果 end from 结果表
select  case  when 结果='8' then cast(结果 as int)+1  else 结果 end  from 结果表

此语句为什们出错? 错误信息 转换为数据类型为 int 的列时发生语法错误。


结果

ABC
DDD
8
100
CCC



------解决方案--------------------
是的,因为int比字符的优先级高。
------解决方案--------------------
结果字段为字符型的,当转换成int时须有条件限制
------解决方案--------------------
引用:
select  case  when 结果='8' then cast(结果 as int)+1  else 结果 end  from 结果表

此语句为什们出错? 错误信息 转换为数据类型为 int 的列时发生语法错误。


结果

ABC
DDD
8
100
CCC


这是因为当等于'8'时,你加1了,也就是一个int型,而如果不等于8,比如‘ABC’,那么就还是'ABC',

这个时候,在结果集中同时存在int型和字符串,sql server会优先把字符串转化为整数int型,显然'ABC'是无法转化为int型,所以就报“ 错误信息 转换为数据类型为 int 的列时发生语法错误。”

再加个转化就行,改成这样就行了哈:

select  case  when 结果='8' then cast(cast(结果 as int)+1 as varchar)  else 结果 end  from 结果表