我有一個問題,試圖使用某些語句,我做了正確的,我看到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
它是正確的。
我會做什麼錯?
我有一個問題,試圖使用某些語句,我做了正確的,我看到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
它是正確的。
我會做什麼錯?
你的數據不乾淨,或者它的格式不正確。
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
如有疑問,請檢查MSDN的功能 –
我認爲錯誤信息很清楚。您可以使用try_convert()
的值轉換爲數字:
SELECT AVG(TRY_CONVERT(DECIMAL(18, 4), Salary)) AS Average_Salary
FROM Employee;
首先,不應該將數值存儲在字符串列中。其次,SQL Server將嘗試轉換,所以你必須有一些不好的值。第三,你應該在你的問題中包括樣本數據和期望的結果。 –