4

SELECT ステートメントは次のとおりです。

SELECT ROUND(ISNULL(SUM(Price),0),2) As TotalPrice
FROM Inventory
WHERE (DateAdded BETWEEN @StartDate AND @EndDate)

小数点以下2桁に丸められない理由について何か考えはありますか?

4

3 に答える 3

10

ROUND(ISNULL(SUM(Price),0),2) あなたが試すことができる代わりにCAST(ISNULL(SUM(PRICE),0) AS DECIMAL (4,2))

于 2009-06-17T04:25:07.227 に答える
2

Price のデータ型は何ですか?

BOL の ROUND

SELECT ROUND(123.4545, 2); -- = 123.4500
GO
SELECT ROUND(123.45, -2);  -- = 100,00
GO

基礎となるデータ型は同じままです。丸めるだけで、末尾のゼロを残します。

小数点以下 2 桁の出力の場合は、decimal(x, 2) にキャストする必要があります。

于 2009-06-17T04:25:08.367 に答える
2

ご使用の環境で列のマーシャリングの問題が発生している可能性があります。明示的なキャスト CAST(ROUND(...) AS NUMERIC(18,4)) を試すか、単に 0 0.0 を作成してみてください。また、アプリケーションで適切なデータ型で列をバインドしていることも確認してください。

クールな人たちは皆、ISNULL の代わりに COALESCE を使用しています。COALESCE は移植性があり、必要な数のパラメーターを使用できます (2 つだけではありません!!)。

とにかく、これが単なる例かどうかはわかりませんが、この段階でまだ丸められていない場合、データに DA の問題が発生する可能性もあります。

于 2009-06-17T04:33:37.957 に答える