将varchar转换为十进制的算术溢出错误

时间:2018-09-11 01:49:05

标签: sql sql-server azure-sql-database

为什么这样做:

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数据库上。

1 个答案:

答案 0 :(得分:1)

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

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转换为十进制就可以了

在第二个查询中,您要为@latitude分配一个'-' 因此,将'-'转换为十进制会导致错误!

因此,在您的第二个查询中声明具有大小的varchar即可

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