0

尝试使用 varchar 字段进行 SUM 时收到错误消息,即使使用 Cast 时也会收到以下错误?

Error converting data type varchar to numeric

SUM(ISNULL(CAST(balance-current_balance_amount /100 AS float),0)) AS bal_diff
4

2 回答 2

3

问题可能是您的余额列中有非数字数据。如果数据有效,您甚至不需要 CAST。

SUM(ISNULL((balance-current_balance_amount)/100 ,0)) AS bal_diff

CAST 和 CONVERT

隐式转换是在未指定 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 类型的新列并开始使用它。

于 2012-11-19T15:37:08.650 回答
1

假设是一个 varchar 字段,您需要在尝试进行计算之前balance 将其转换为数字(如果这是您想要的)数据类型:float

例如/

SUM(
  ISNULL(
    (CAST(balance AS FLOAT)-current_balance_amount)/100
  ,0)
) AS bal_diff
于 2012-11-19T15:09:31.620 回答