从varchar到numeric的SQL Server CAST失败并出现错误

时间:2010-12-28 18:03:31

标签: sql-server casting

我有一列包含9位数字值的数据,但该列被定义为varchar。我需要将字段CAST为数值,这样我就可以将列的总和除以100.例如

select CAST(field1 as numeric(9,2)) / 100 from table;

运行查询时出现以下错误:将varchar转换为数据类型numeric的算术溢出错误。

如果我从varchar执行双CAST - > int - >数字,CAST工作。 e.g。

select CAST(CAST(field1 as int) as numeric(9,2)) / 100 from table;

来自varchar的单个CAST是否有原因 - >数字导致SQL错误,但双CAST工作?

2 个答案:

答案 0 :(得分:6)

如果您的字段包含9位数字,则最多可能为999,999,999。我最初的想法是你的演员应该是CAST (NUMERIC 11, 2)

修改

为了安全起见,长度为9个字符,您可以使用999,999,9990.1234567之间的数字。这意味着您需要小数点前9位数和后7位数(总共16位)。因此,您的演员应该是CAST (NUMERIC (16,7)

select CAST(field1 as numeric(16,7) from table;

答案 1 :(得分:2)

错误原因是一行“ - ”作为字段的值。直接铸造到NUMERIC不起作用,但是CASTing到INT首先强制' - '字段返回0.