在SQL Server 2014 select子句中,
AVG(CONVERT(DECIMAL(11, 8), p.[Total])) AS [Value]
其中p.[Total]
的类型为varchar(50)
,会引发此错误:
信息8115,第16级,状态8,第2行
将varchar转换为数值数据类型的算术溢出错误
但是
AVG(TRY_CONVERT(DECIMAL(11, 8), p.[Total])) AS [Value]
不不返回任何空值,这应该在CONVERT失败时执行。当我省略[Value]列时,返回的行数与使用TRY_CONVERT时的行数相同。
此外,在[Value]中保留TRY_CONVERT并在
中过滤空值HAVING AVG(TRY_CONVERT(DECIMAL(11, 8), p.[Total])) IS NULL
不返回任何行。为什么TRY_CONVERT
似乎在所有行上都有效(无null),但是CONVERT
却行不通?
答案 0 :(得分:4)
表达式:
AVG(TRY_CONVERT(decimal(11, 8), p.[Total]))
如果所有值转换失败,只会返回NULL
。
您需要以下形式的非聚合查询:
select p.total
from t
where try_convert(decimal(11, 8), p.total) is null;