2016-08-04 58 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;