0

我有以下查询返回结果为 Null 或零:

SELECT TOP 1 ISNULL([jul-12],0) FROM Table_tmp 
WHERE ID = 123250838

但是当我添加一个询问列值是否为零的条件时会导致溢出错误:

SELECT TOP 1 ISNULL([jul-12],0) FROM Table_tmp 
WHERE ID = 123250838
AND [jul-12] <> 0

该列的数据类型为 FLOAT

exec sp_help 'Table_tmp'
jun-12  float   no  8   53      NULL    yes (n/a)   (n/a)   NULL

我尝试了函数 CONVERT () 和 CAST () 但结果相同。

但是当 [Jul-12] 列的值不为零时,它可以正常工作。为什么会这样?

4

3 回答 3

1

Try like below... may be it will help you...

SELECT TOP 1 ISNULL([jul-12],0) FROM Table_tmp 
WHERE  Str([jul-12], 25, 5) <> '0'
于 2013-02-08T16:00:30.253 回答
0

这是因为 CAST () 规范。结果数据类型将与第二个参数中的一样。为避免这种情况,您可以使用通过第一个参数确定结果数据类型的 COALESCE 函数,此函数的另一个好处是它是 ANSI 标准(而不是 ISNULL)。您可以在此处查找此功能: COALESCE MSDN 在您的情况下的用法是:COALESCE(jul-12],0)- 这将首先返回非空值。

于 2013-02-08T16:08:21.713 回答
0

我刚刚遇到了这个问题,并通过在我使用 cast() 的列上的“WHERE”中添加一个“IS NOT NULL”子句来解决它

于 2013-12-20T16:10:55.157 回答