【发布时间】:2014-09-15 14:15:06
【问题描述】:
刚才我在运行存储过程时遇到了这个错误:
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,并在此过程中将列[A-F 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)
我不想在不确定是否已解决问题的情况下再次运行整个过程。感谢您的帮助。
【问题讨论】:
-
我认为您需要在减法之前将其转换回浮点数:
SELECT @AF_MIN_3L = CAST(LEFT(MIN([A-F Est_CY]), 6) AS float ) - 0.000001 FROM #Ent_AF_3但我想这取决于您实际想要完成的任务。 -
您的操作似乎出了问题——不应该是
MIN(CAST(LEFT([A-F Est_CY], 6) AS FLOAT))吗?取左边6个字符,转换成float,求最小值? -
你的目标是什么?
select @a=-0.00001导致select @a>-1E-05和select LEFT(@a, 6)>-1e-00
标签: sql sql-server sql-server-2012