insert into price (new_num) select ceiling(old_num)-1 from data

解决方案 »

  1.   

    楼主想要的结果是什么?4.5插入到price表中想得到个什么结果?
      

  2.   

    insert into price (new_num) select round(old_num,0) from data
      

  3.   

    上面的有点错,那是针对有小数的情况的处理
    declare @a varchar(4)
    set @a='3.5'
    select ceiling(@a)-1得到: 3
      

  4.   

    create table data(old_num varchar(10))
    insert into data select '1' union all
    select '4.5' union all
    select '2' create table price(new_num int)
    insert into price (new_num) select cast(cast(old_num as float) as int) from data
    select * from price
    結果:
    new_num     
    ----------- 
    1
    4
    2(影響 3 個資料列)
      

  5.   

    insert into price (new_num) select (case when charindex('.',oldnum)<>0  then  ceiling(old_num)-1 else old_num end) from data
      

  6.   

    ls_jingwen(靜雯) 与  lsqkeke(可可)   的方法运行后出错
    服务器: 消息 8114,级别 16,状态 5,行 1
    将数据类型 varchar 转换为 float 时出错。我原来的数据库中oldnum是用varchar记录的数量并且有非法内容比如'4.5',想把这些数据转成int的
      

  7.   

    insert into price (new_num) select cast(old_num as int) as  old_num from data
    如果对非法的数据没什么要求的话,都这样处理算了
      

  8.   

    楼上的也不行
    服务器: 消息 245,级别 16,状态 1,行 1
    将 varchar 值 '4.5' 转换为数据类型为 int 的列时发生语法错误。
      

  9.   


    insert into price (new_num) select round(old_num,0) from data
      

  10.   

    将varchar直接转换成int会出错,如果varchar的数据有像4.5这样带小数点的数据,而int是整型的.转换过程中会出现舍位.
    1.如果数据要求准确的话,修改数据类型 将int改成numeric型的.如numeric(10,2)
    2.如果不要求数据准确,可以尝试
    insert into price (new_num) select cast(old_num as numeric(10,2)) from data 
    或insert into price (new_num) select round(old_num,2) from data 
    小数位数可以自己定
      

  11.   

    楼上的朋友,运行后还是显示以下错误
    服务器: 消息 8114,级别 16,状态 5,行 1
    将数据类型 varchar 转换为 float 时出错。
    是不是我的表内有非法字符或什么的,怎么能查一下
      

  12.   

    查了一下原来很多记录中记录的数字中有空格,如何把old_num的空格过滤掉呢
      

  13.   

    insert into price (new_num)  select case when isnull(old_num,'')<>'' then  round(old_num,0) else 0 end  from data