Ste*_*ost 0 sql t-sql sql-server
在 SQL Server 2014 select 子句中,
AVG(CONVERT(DECIMAL(11, 8), p.[Total])) AS [Value]
其中p.[Total]的类型为varchar(50),会引发此错误:
消息 8115,级别 16,状态 8,第 2 行
将 varchar 转换为数据类型 numeric 时发生算术溢出错误
但
AVG(TRY_CONVERT(DECIMAL(11, 8), p.[Total])) AS [Value]
不返回任何空值,当 CONVERT 失败时它应该这样做。当我省略 [Value] 列时,返回的行数与使用 TRY_CONVERT 时相同。
另外,使用 TRY_CONVERT 保留 [Value] 并使用过滤空值
HAVING AVG(TRY_CONVERT(DECIMAL(11, 8), p.[Total])) IS NULL
不返回任何行。为什么TRY_CONVERT似乎对所有行(无空值)都有效,但CONVERT事实并非如此?
表达方式:
AVG(TRY_CONVERT(decimal(11, 8), p.[Total]))
NULL仅当所有值都无法转换时才会返回。
您需要以下形式的非聚合查询:
select p.total
from t
where try_convert(decimal(11, 8), p.total) is null;