2016-08-04 4 views
0

У меня возникла проблема с попыткой использовать определенную инструкцию, и я сделал ТОЧНО, что я увидел на youtube, и я все еще ошибаюсь. Вот мой вопросЗаявление SQL Server 2012 AVG

SELECT AVG(Salary) AS Average_Salary FROM Employee; 

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

я сделал ту же самую вещь и до сих пор есть это неправильно, но в youtube video это было правильно.

Что я могу делать неправильно?

+1

Во-первых, вам не следует хранить числовые значения в столбце строки. Во-вторых, SQL Server попытается выполнить преобразование, поэтому у вас должны быть некоторые плохие значения. В-третьих, вы должны включить образцы данных и желаемые результаты в свой вопрос. –

ответ

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

+0

Если у вас есть сомнения, проверьте функцию из MSDN –

1

Я думаю, что сообщение об ошибке довольно ясно. Вы можете использовать try_convert() для преобразования значения в число:

SELECT AVG(TRY_CONVERT(DECIMAL(18, 4), Salary)) AS Average_Salary 
FROM Employee;