Sql 将数字(19,16)转换为数据类型数字(19,19)的算术溢出
尝试做一些非常琐碎的事情(将numeric(19,16)类型的列转换为numeric(19,19),但不断得到算术溢出错误Sql 将数字(19,16)转换为数据类型数字(19,19)的算术溢出,sql,database,Sql,Database,尝试做一些非常琐碎的事情(将numeric(19,16)类型的列转换为numeric(19,19),但不断得到算术溢出错误 ALTER TABLE X ALTER COLUMN Column1 numeric(19,19) 有什么想法吗?您有无法放入数字(19,19)中的数据-您想如何“修复”这一问题取决于您-但您需要查看不适合的数据并决定如何处理 如果所有数据均已安装,则运行正常: create table X (Column1 numeric(19,16)) create table
ALTER TABLE X
ALTER COLUMN Column1 numeric(19,19)
有什么想法吗?您有无法放入
数字(19,19)
中的数据-您想如何“修复”这一问题取决于您-但您需要查看不适合的数据并决定如何处理
如果所有数据均已安装,则运行正常:
create table X (Column1 numeric(19,16))
create table Y (Column1 numeric(19,16))
insert into X(Column1) values (0.1)
insert into Y(Column1) values (1.0)
这项工作:
ALTER TABLE X
ALTER COLUMN Column1 numeric(19,19)
这将产生以下错误:
ALTER TABLE Y
ALTER COLUMN Column1 numeric(19,19)
因为你不能把一个带有整数部分的数字放入一个数字(19,19)
如果要查找不符合更改的列定义的值,请首先运行以下命令:
SELECT * FROM X where ABS(Column1) >= 1.0;
数字(19,19)表示您有19位数字,所有19位都在小数点后-因此您可以存储的最大数字是0.999999999999999(0后19个9)
因此,如果在数值(19,16)列中有任何大于或等于1的值,则无法将其转换为(19,19)
数字(19,16)可以存储小数点后3位和16位,使999.999999999999999成为可能的最大数字
例如,这将起作用:
DECLARE @a NUMERIC(19,16)
SET @a = 0.1234567890123456
SELECT CAST (@a AS NUMERIC(19,19))
这不会:
DECLARE @b NUMERIC(19,16)
SET @b = 123.1234567890123456
SELECT CAST (@b AS NUMERIC(19,19))
这也不是:
SELECT CAST (1 AS NUMERIC(19,19))
编辑:Damien_不信者发布了一个很好的选择来检查不适合(19,19)的行。如果你真的想转换为数字(19,1),你应该使用它。但是,我猜你不是真的想转换为(19,19),而是保留数据,只添加3位精度-这是数字(22,19)你在使用什么RDBMS?