我在尝试使用某个声明时遇到了问题,而且我在youtube
上看到了我所看到的内容,但我仍然认为它不正确。这是我的问题
SELECT AVG(Salary) AS Average_Salary FROM Employee;
Error: Operand data type varchar is invalid for avg operator.
我做了完全相同的事情但仍然错了,但在youtube video
它是正确的。
我可能做错了什么?
答案 0 :(得分:1)
我认为错误信息非常清楚。您可以使用try_convert()
将值转换为数字:
SELECT AVG(TRY_CONVERT(DECIMAL(18, 4), Salary)) AS Average_Salary
FROM Employee;
答案 1 :(得分:0)
您的数据不干净或格式不正确。
SELECT SALARY
FROM dbo.Employee
WHERE ISNUMERIC(Salary) = 1
可能您会发现您的工资包括您的数字中的(,),这些数字无法通过隐式转换转换为数字整数。
SQL Server很聪明,但必须遵循转换优先级。尝试将非数字varchar隐式转换为整数通常被视为非法转换。 AVG采用explicit numeric值,因此尝试隐式转换字符串会导致函数丢失信息(它无法隐式执行)。
相反,将值转换为可以灵活使用非数字值的数据类型,例如
SELECT AVG(CAST(Salary AS MONEY)) as SALARY_AVG
FROM Employees
要更好地了解隐式转化和限制,请参阅DATA TYPE CONVERSIONS