1
私は、nvarcharとして設定されていない列で作業しています。時には、平均したい数値、時には文字、空の文字列値。この列の数値の平均が0より大きい場合、どうすればよいですか?SQL Server - ときには数字と時には文字列を含む列の平均を返します。
逆の質問:列を修正したい場合は、数値を失うことなく何を行うのが最適ですか?
私は、nvarcharとして設定されていない列で作業しています。時には、平均したい数値、時には文字、空の文字列値。この列の数値の平均が0より大きい場合、どうすればよいですか?SQL Server - ときには数字と時には文字列を含む列の平均を返します。
逆の質問:列を修正したい場合は、数値を失うことなく何を行うのが最適ですか?
ない防弾が、動作するはずです:偉大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;
これは便利ですが、私はテーブルを修正するCTEを使用することができ、あまりにも。 –
Re:「弾丸ではない」 ['IsNumeric()'](https://docs.microsoft.com/en-us/sql/t-sql/functions/isnumeric-transact-sql)の新機能については、 //www.sqlservercentral.com/articles/ISNUMERIC()/71512/)。 – HABO