首页 > 解决方案 > 将 varchar 转换为十进制的算术溢出错误

问题描述

为什么会这样:

Declare @latitude varchar = '34.343';
Declare @decLatitude Decimal(9,6);
Set @decLatitude = CAST(@latitude AS Decimal(9,6));

但这不是吗?

Declare @longitude varchar = '-92.6424';
Declare @decLongitude Decimal(9,6);
Set @decLongitude = CAST(@longitude AS Decimal(9,6));

它返回错误“将 varchar 转换为数据类型数字的算术溢出错误”。

这是在 Azure SQL 数据库上。

标签: sqlsql-serverazure-sql-database

解决方案


你确定你在第一个查询中得到了你想要的吗?

Declare @latitude varchar = '34.343';
Declare @decLatitude Decimal(9,6);
Set @decLatitude = CAST(@latitude AS Decimal(9,6));

您是否检查了两个变量中存储的值是多少?

select  @latitude, @decLatitude

如果您没有为 指定大小varchar,则假定为1

Declare @latitude varchar = '34.343';

所以基本上你分配3@latitude 转换3为十进制就可以了

在您的第二个查询中,您正在将 a 分配'-'给 @latitude 所以转换'-'为十进制会导致错误!

因此,在您的第二个查询中声明一个具有大小的 varchar 将起作用

Declare @longitude varchar(10) = '-92.6424';

推荐阅读