有点乱.建议再确认一下该字段现在是什么类型的?如果是decimal,那应该是统计语句的问题,检查其中对该字段的处理过程.如果是varchar,检查该字段是否有非法数据,用isnumeric()函数判断.

解决方案 »

  1.   

    测了一下,虽然插入的时候进行隐式转换,但是貌似没影响CREATE TABLE testA
    (a DECIMAL(10,2))INSERT INTO testA
    VALUES('123.4')SELECT * FROM testASELECT a+12.4
    FROM testA
    /*(1 row(s) affected)
    a
    ---------------------------------------
    123.40(1 row(s) affected)
    ---------------------------------------
    135.80*/
      

  2.   

    现在的字段类型是decimal,之前以varchar保存有记录
      

  3.   

    那你最好全部数据处理一下,把类型转换成decimal,可以用isnumeric()函数找出数值型的数据,对于不是数值型的数据,就手动更新吧
      

  4.   

    既然能改为decimal,说明没有非法数据,
    应该是统计语句的问题,检查其中对该字段的处理过程.
      

  5.   

    既然你已经把这个字段的数据类型,修改为decimal,那么应该不可能出现你的这个问题。你再检查一下这个字段的数据类型是否为decimal。
      

  6.   

    表里的数据如下图:
    sl这个字段用语句查询时,显示结果:意思是直接修改了sl的数据类型后,还存在VARCHAR类型?
      

  7.   

    有没有办法一次性把数据改成现在的decimal类型
      

  8.   


    哦 这个不表示,存在的varchar,因为你用where sl = '3.00'时,系统会自动把这个字符串'3.00'转化为3.00,所以也能把sl为3.00的记录给查询出来的。这个不是问题哈,是对的。
      

  9.   

    那就是系统存的数据还是以前的varchar类型,有办法把数据一次性修改成decimal吗
      

  10.   

    创建一个新表,对应的列从varchar改成decimal,然后把数据插回去,插的过程中用convert来显式转换类型,插完之后删除原表,重命名新表