insert into price (new_num) select round(old_num,0) from data
上面的有点错,那是针对有小数的情况的处理 declare @a varchar(4) set @a='3.5' select ceiling(@a)-1得到: 3
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 個資料列)
insert into price (new_num) select (case when charindex('.',oldnum)<>0 then ceiling(old_num)-1 else old_num end) from data
insert into price (new_num) select round(old_num,0) from data
将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 小数位数可以自己定
declare @a varchar(4)
set @a='3.5'
select ceiling(@a)-1得到: 3
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 個資料列)
服务器: 消息 8114,级别 16,状态 5,行 1
将数据类型 varchar 转换为 float 时出错。我原来的数据库中oldnum是用varchar记录的数量并且有非法内容比如'4.5',想把这些数据转成int的
如果对非法的数据没什么要求的话,都这样处理算了
服务器: 消息 245,级别 16,状态 1,行 1
将 varchar 值 '4.5' 转换为数据类型为 int 的列时发生语法错误。
insert into price (new_num) select round(old_num,0) from data
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
小数位数可以自己定
服务器: 消息 8114,级别 16,状态 5,行 1
将数据类型 varchar 转换为 float 时出错。
是不是我的表内有非法字符或什么的,怎么能查一下