尝试使用 varchar 字段进行 SUM 时收到错误消息,即使使用 Cast 时也会收到以下错误?
Error converting data type varchar to numeric
SUM(ISNULL(CAST(balance-current_balance_amount /100 AS float),0)) AS bal_diff
尝试使用 varchar 字段进行 SUM 时收到错误消息,即使使用 Cast 时也会收到以下错误?
Error converting data type varchar to numeric
SUM(ISNULL(CAST(balance-current_balance_amount /100 AS float),0)) AS bal_diff
问题可能是您的余额列中有非数字数据。如果数据有效,您甚至不需要 CAST。
SUM(ISNULL((balance-current_balance_amount)/100 ,0)) AS bal_diff
隐式转换是在未指定 CAST 或 CONVERT 函数的情况下发生的转换。
VARCHAR 到 NUMERIC 或 FLOAT 就是这样的例子。
由于您正在处理可能有小数位和可能的“$”的余额,因此 CAST to MONEY 应该可以解决您的问题。
SUM(ISNULL((CAST(balance AS MONEY)-current_balance_amount)/100 ,0))
如果您的余额列中有其他非数字数据在您的 CAST 到 MONEY 后仍然导致问题,您可以在 SELECT 中执行 CASE 语句
SUM(ISNULL(((CASE WHEN ISNUMERIC(balance) = 0 THEN NULL ELSE CAST(balance AS MONEY) END)-current_balance_amount)/100 ,0))
或者更好的是,创建一个 MONEY 类型的新列并开始使用它。
假设是一个 varchar 字段,您需要在尝试进行计算之前balance
将其转换为数字(如果这是您想要的)数据类型:float
例如/
SUM(
ISNULL(
(CAST(balance AS FLOAT)-current_balance_amount)/100
,0)
) AS bal_diff