我在尝试使用varchar字段进行SUM时收到错误消息,即使使用Cast也会出现以下错误?
Error converting data type varchar to numeric
SUM(ISNULL(CAST(balance-current_balance_amount /100 AS float),0)) AS bal_diff
答案 0 :(得分:3)
问题可能是您的余额列中包含非数字数据。如果数据有效,您甚至不需要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类型的新列并开始使用它。
答案 1 :(得分:1)
假设balance
是一个varchar字段,在尝试进行计算之前,需要将其转换为数字(float
,如果这就是你想要的)数据类型:
例如/
SUM(
ISNULL(
(CAST(balance AS FLOAT)-current_balance_amount)/100
,0)
) AS bal_diff