Sql server SQL Server-计算有时包含数字,有时包含字符串的列的平均值

Sql server SQL Server-计算有时包含数字,有时包含字符串的列的平均值,sql-server,sql-server-2008,tsql,Sql Server,Sql Server 2008,Tsql,我正在处理一个列,该列的nvarchar设置很差,它有时有一个数字,我想求平均值,有时是字母、null或空字符串值。如何获得此列大于0的所有数值的平均值 附带问题:如果我想修复列,在不丢失任何数值的情况下,最好的方法是什么 不是防弹的,但应能工作: WITH cte AS ( SELECT * FROM your_tab WHERE ISNUMERIC(col) = 1 ) SELECT AVG(CAST(col AS DECIMAL(18,2))) AS average FROM

我正在处理一个列,该列的nvarchar设置很差,它有时有一个数字,我想求平均值,有时是字母、null或空字符串值。如何获得此列大于0的所有数值的平均值


附带问题:如果我想修复列,在不丢失任何数值的情况下,最好的方法是什么

不是防弹的,但应能工作:

WITH cte AS (
  SELECT *
  FROM your_tab
  WHERE ISNUMERIC(col) = 1
)
SELECT AVG(CAST(col AS DECIMAL(18,2))) AS average
FROM cte
WHERE CAST(col AS DECIMAL(18,2)) > 0;

SQL Server 2012+功能强大:

SELECT AVG(casted_col) AS average
FROM (
  SELECT TRY_CAST(col AS DECIMAL(18,2)) AS casted  -- NULL if cannot cast
  FROM your_tab
) sub
WHERE casted_col > 0;

这很方便,我也可以用CTE来修理桌子。对于那些新加入的人来说,这是出了名的。