[英]varchar to numeric:Error converting data type varchar to numeric
我正在尝试使用以下代码行将以varchar格式设置的列转换为十进制(19,12)
ALTER TABLE [tablename]
ALTER COLUMN [columnname][format]
并得到以下提示:
Msg 8114, Level 16, State 5, Line 25
Error converting data type varchar to numeric.
以前像魅力一样工作过。 这里的问题似乎是该列中的值是19个左右的数字数值,格式为文本。
我试图创建一个新列,将缩短的单元格值(使用left()函数)从原始列粘贴到该列中,但这似乎没有解决问题的方法,因为上面的代码以附加的“算术溢出”结尾发生了。” 信息。
当某些行的值不正确时, ALTER COLUMN
将不起作用。 典型的操作过程如下:
步骤2将如下所示:
UPDATE MyTable
SET NewColumn =
CASE WHEN ISNUMERIC(OldColumn)=1 AND DATALENGTH(OldColumn) <= 19 THEN
CAST(OldColumn AS decimal(19,12))
ELSE
NULL
END
您也可以使用SET ANSI_WARNINGS OFF
命令关闭ANSI警告,这将使您可以忽略数据截断错误而运行ALTER COLUMN
。 这种方法的缺点是潜在的错误会被忽略。 另一方面,当您使用CASE
表达式进行显式转换时,可以选择为错误情况提供替代值(我在上面使用了NULL
,但是您可以输入任意数字)。
您能分开解决问题吗? 这确实适用于SQL 2012:
set nocount on
if object_id ('tempdb..#t1') is not null drop table #t1
create table #t1 (c1 varchar(100))
insert #t1 values ('1234567.8901234567890')
select * from #t1
alter table #t1
alter column c1 decimal(19,12)
select * from #t1
如果您在弦乐上稍作改动,很容易会产生算术溢出错误。 但是“将数据类型varchar转换为数字时出错”需要字符或空字符串 。
也许您可以尝试使用数据?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.