我有一列包含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工作?
答案 0 :(得分:6)
如果您的字段包含9位数字,则最多可能为999,999,999
。我最初的想法是你的演员应该是CAST (NUMERIC 11, 2)
修改强>
为了安全起见,长度为9个字符,您可以使用999,999,999
到0.1234567
之间的数字。这意味着您需要小数点前9位数和后7位数(总共16位)。因此,您的演员应该是CAST (NUMERIC (16,7)
select CAST(field1 as numeric(16,7) from table;
答案 1 :(得分:2)
错误原因是一行“ - ”作为字段的值。直接铸造到NUMERIC不起作用,但是CASTing到INT首先强制' - '字段返回0.