我在将nvarchar字符强制转换为numeric报错。
其格式如下:
     select   cast(h.U_SecondUnit as numeric)
     from [@ava_oime] h 
    我也知道数据表[@ava_oime]中的 U_SecondUnit 字段中有字符,需要限制,如果在后面加个限制:
     select   cast(h.U_SecondUnit as numeric)
     from [@ava_oime] h  
     where     isnumeric(h.u_secondunit) =1
    就会把大量的数据去除掉的,所以这样也不可行。那我该怎么办才好,数据库中的表[@ava_oime]的字段类型是不能修改的。    请各位大侠帮帮我解决下,我在这里不胜感激啊!!

解决方案 »

  1.   

    你先用
    select  h.U_SecondUnit
    from [@ava_oime] h 
    where isnumeric(h.u_secondunit) =0 
    查查那些不完全是数字的数据有什么规律,然后用replace把他们消掉,再转成数字
      

  2.   

    select  cast(U_SecondUnit as numeric) 
    from (
    select *
    from [@ava_oime] h  
    where   isnumeric(h.u_secondunit) =1 
    ) as t这样呢?
      

  3.   

    我用select  h.U_SecondUnit
    from [@ava_oime] h 
    where isnumeric(h.u_secondunit) =0 查看了,就是3种的数据,一种是NULL,一种是汉字字符,剩下的就是显示的是为空,以后数据库中有新数据的话,也是在这3种中出现的。请教josy 大侠,我下来该怎么替代的,谢谢!
      

  4.   


    原始数据是下面截图中的3中,我要的替代后的数据能直接插入到另外一个表的字段为numeric型中,只要不报错,就能插入到另外一个表中的,就好了。
      

  5.   

    你这样写试试select CASE WHEN ISNUMERIC(H.U_SECONDUNIT)=1 THEN cast(h.U_SecondUnit as numeric) ELSE NULL END
        from [@ava_oime] h 
      

  6.   


    如果只是要求不报错,不取含有中文或者null里面的数据的话,直接用0替代就可以了
    类似这样:
    select  
      case 
        when isnumeric(h.u_secondunit)=1  then cast(h.U_SecondUnit as numeric)
        else 0
       end
    from [@ava_oime] h