刚才我在运行存储过程时遇到此错误:
Arithmetic overflow error converting varchar to data type numeric.
我找到了该错误发生的行,这是该行的代码:
SELECT @AF_MIN_3L = LEFT(MIN([A-F Est_CY]), 6) - 0.000001 FROM #Ent_AF_3
在存储过程的前面,我将@ AF_MIN_3L声明为数据类型FLOAT,创建了临时表#Ent_AF_3,并在此过程中使列[AF Est_CY]数据类型为FLOAT。以下代码是否创建非FLOAT值?
LEFT(MIN([A-F Est_CY]), 6) - 0.000001
我希望这是一个简单的转换问题,我要做的只是这样:
LEFT(MIN(CAST([A-F Est_CY] AS FLOAT)), 6) - CAST(0.000001 AS FLOAT)
在不想确定已解决此问题的情况下,我不想再次运行整个过程。谢谢你的帮助。
如果使用的是字符串函数LEFT
,它将返回一个字符串值。如上所述这里时,返回的数据类型LEFT
函数确实返回VARCHAR
或NVARCHAR
。所以,ideed,一个CAST
或CONVERT
回FLOAT
是必需的。您当然应该将函数转换回FLOAT
AFTER之后LEFT
,因此应该是:CAST(LEFT(...)as FLOAT)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句