T-SQL CONVERT错误,但TRY_CONVERT不为空

时间:2018-12-06 16:08:44

标签: sql sql-server tsql

在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却行不通?

1 个答案:

答案 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;