2017-09-14 5 views

答えて

3

ない防弾が、動作するはずです:偉大TRY_CAST機能を有する2012+

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の:

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; 
+1

これは便利ですが、私はテーブルを修正するCTEを使用することができ、あまりにも。 –

+0

Re:「弾丸ではない」 ['IsNumeric()'](https://docs.microsoft.com/en-us/sql/t-sql/functions/isnumeric-transact-sql)の新機能については、 //www.sqlservercentral.com/articles/ISNUMERIC()/71512/)。 – HABO

関連する問題