我有table1
有两列:
col1 - nvarchar(510)
col2 - nvarchar(510)
我想从table1
获取所有值,并将其放到数据类型不同的table2
中:
col1_A - numeric(22,10)
col2_A - int
我这样做:
insert into table2
select cast(col1 as numeric), cast(col2 as int)
但我收到错误:
有什么问题?
答案 0 :(得分:1)
你可能在table1.col1
中有一个角色。另外,指出table1.col1
为nvarchar(510)
,但if len(table1.col1) > 11
您将获得算术溢出错误,这一点非常重要。
declare @char nvarchar(510)
set @char = '123456789101'
--set @char = '1234567891011' --will cause an arithmetic overflow error since you are using numeric(22,10)
--set @char = '123abc456' --will cause Error converting data type nvarchar to numeric
declare @num numeric(22,10)
set @num = cast(@char as numeric(22,10))
select @num
答案 1 :(得分:0)
这意味着您需要清理数据。找出导致问题的值,然后先手动更正或排除它们。要查找哪些值不是数字,请使用ISNUMERIC
函数。
select col1
from yourtable
where ISNUMERIC(col1) = 0
答案 2 :(得分:0)
谢谢 Eric 寻求帮助以找到错误的recrods! 我做了如下案例:
case
when [col1] LIKE '%,%' then REPLACE([col1]),',','')
else CAST([col1] as Numeric)
end
它正在工作!