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

以下のように試してください...それはあなたを助けるかもしれません...

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()仕様によるものです。結果のデータ型は、2番目のパラメーターのようになります。これを回避するには、最初のパラメーターによって結果のデータ型を判別するCOALESCE関数を使用できます。また、この関数の利点は、(ISNULLではなく)ANSI標準であるということです。この関数はここで探すことができます: あなたの場合のCOALESCE MSDN の使用法は次のとおりです:COALESCE(jul-12],0)-これは最初にnull値ではなく戻り値を返します。

于 2013-02-08T16:08:21.713 に答える
0

この問題に遭遇し、cast()を使用していた列の「WHERE」に「ISNOTNULL」句をスローすることで問題を解決しました。

于 2013-12-20T16:10:55.157 に答える