как это исправить Msg 8117, уровень 16, состояние 1, сервер WIN-ILO9GLLB9J0, строка 2 Тип данных операнда varchar недопустим для оператора avg - PullRequest
0 голосов
/ 11 января 2019

Я решаю проблемы хакерского ранга и застрял с ошибкой

Сообщение 8117, уровень 16, состояние 1, сервер WIN-ILO9GLLB9J0, строка 2
Тип данных операнда varchar недопустим для оператора avg.

любезно предложите изменения

Я пытался написать этот запрос

SELECT CEILING((AVG(Salary))-(AVG(REPLACE(Salary,0,'')))) FROM EMPLOYEES

2061

Ответы [ 3 ]

0 голосов
/ 11 января 2019

Вы можете попробовать это

SELECT CEILING((AVG(CAST('2061' as Int)))-(AVG(CAST('2061' as Int)))) FROM EMPLOYEES
0 голосов
/ 11 января 2019

Я думаю, что «верный» ответ здесь - исправить ваш тип данных. Вы можете сделать это, используя синтаксис ALTER:

ALTER TABLE dbo.EMPLOYEES ALTER COLUMN Salary decimal(18,2); --Assumed dbo schema

Возможно, вы захотите использовать тип данных, отличный от decimal(18,2), но это даст вам основной синтаксис.

Тогда простое выражение типа AVG(Salary) не выдаст ошибку о том, что Salary является неправильным типом данных для оператора.

0 голосов
/ 11 января 2019

Ваш столбец Зарплата varchar, должен иметь числовой тип.

SELECT CEILING((AVG(CAST (Salary AS DECIMAL (10,2))))-(AVG(CAST (Salary AS DECIMAL (10,2))))) FROM EMPLOYEES
...