SQL Server 2012 AVG声明

时间:2016-08-04 01:38:16

标签: sql sql-server sql-server-2012

我在尝试使用某个声明时遇到了问题,而且我在youtube上看到了我所看到的内容,但我仍然认为它不正确。这是我的问题

SELECT AVG(Salary) AS Average_Salary FROM Employee;

Error: Operand data type varchar is invalid for avg operator.

我做了完全相同的事情但仍然错了,但在youtube video它是正确的。

我可能做错了什么?

2 个答案:

答案 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