select case isnumeric(OldData) 
when 1 then convert(decimal(20,2),OldData) 
--else OldData
 end as OldData 
from table
这条语句没有错,
但是
select case isnumeric(OldData) 
when 1 then convert(decimal(20,2),OldData) 
--else OldData
 end as OldData 
from table
执行时报错
服务器: 消息 8114,级别 16,状态 5,行 1
将数据类型 varchar 转换为 numeric 时出错。这是为什么?
补充OldData里面的数据既有varchar也有float,我的意思是如果是数字就转化为小数点后两位,如果不是,保留原值

解决方案 »

  1.   

    select case isnumeric(OldData) 
    when 1 then ltrim(convert(decimal(20,2),OldData))
    else OldData 
    end as OldData 
    from table 
      

  2.   

    需要转换下类型
    比较简单的就是TONY哥的ltrim
    其实用convert(varchar(20),convert(decimal(20,2),OldData))
    或者cast(convert(decimal(20,2),OldData) as varchar(20))也是可以的 
      

  3.   

    select case isnumeric(OldData) 
    when 1 then LTRIM(convert(decimal(20,2),OldData) )
    else OldData 
    end as OldData 
    from [table]
    你的字段是NUMERIC的类型
      

  4.   

    你字段是VARCHAR,最后的值也要是VARCHAR