将数据从nvarchar转换为数字时出错

时间:2016-08-18 14:55:56

标签: sql-server sql-server-2008 tsql type-conversion

我有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)

但我收到错误:

enter image description here

有什么问题?

3 个答案:

答案 0 :(得分:1)

你可能在table1.col1中有一个角色。另外,指出table1.col1nvarchar(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

它正在工作!