2016-10-12 15 views
0

何らかの理由でORIGINAL_BOOK列のデータ(小数点以下2桁(例:876.76)であっても)の下の文は、小数点以下を切り捨てます。私は小数点も見えるようにしたい。誰かがこの問題を解決する方法を提案できますか?TSQL - 切り捨てや丸めを避ける方法

Case 
    When [DN].[SETTLEMENT_DATE] > [DN].[AS_OF_DATE] 
     Then Cast([DN].[ORIGINAL_BOOK] as decimal(28, 2)) 
     Else Cast([DN].[CURRENT_BOOK] as decimal(28, 2)) 
End 
+4

'CURRENT_BOOK'のデータタイプは何ですか?そこに値はどのように格納されていますか?これが文字列の値であれば小数点を区切るためにドットやコンマなどの文化固有の違いを見てください... – Shnugo

+0

小数点はどのように_invisible_ですか?書かれているように、 'CASE'式は常に小数点以下2桁(またはNULL)の値を返します。あなたはその価値によって何をしていますか? – HABO

+0

ORIGINAL_BOOKフィールドとCURRENT_BOOKフィールドの両方 – jason

答えて

1

あなただけの関係フィールドのタイプは、ソース・フィールドは本当にただNUMERICタイプ、NUMERIC(18,0)にSQLのデフォルト値(ある場合は、任意の精度または位取りを指定せずに、NUMERICであると言うので、私は確認することはできませんMSDNのドキュメントhereに従って)、スケールをゼロ(つまり、小数点の後には値がありません)とより大きいスケール(小数点の後のデータ)でこれらのフィールドに書き込まれた値のみを格納することができますそれに応じて丸める:

CREATE TABLE dn (
    ORIGINAL_BOOK NUMERIC, 
    CURRENT_BOOK NUMERIC 
) 

INSERT INTO dn 
SELECT 876.76, 423.75 
UNION 
SELECT 0, 0 
UNION 
SELECT 1.1, 6.5 
UNION 
SELECT 12, 54 
UNION 
SELECT 5.789, 6.321 

SELECT CAST(dn.ORIGINAL_BOOK AS DECIMAL(28,2)) AS ORIGINAL_BOOK_CONV, 
     CAST(dn.CURRENT_BOOK AS DECIMAL(28,2)) AS CURRENT_BOOK_CONV 
FROM dn 

DROP TABLE dn 

の結果を与える:

/----------------------------------------\ 
| ORIGINAL_BOOK_CONV | CURRENT_BOOK_CONV | 
|--------------------+-------------------| 
| 0.00    | 0.00    | 
| 1.00    | 7.00    | 
| 6.00    | 6.00    | 
| 12.00    | 54.00    | 
| 877.00    | 424.00   | 
\----------------------------------------/ 

テーブル内のフィールドの規模を大きくすると、小数点以下の桁大きい番号の値を格納することができるようになり、適切であれば、あなたのCASTコールは、小数点以下の桁数を削減します:

あなたがあなたのテーブルのフィールドがゼロ以上に数値を含むことができることが確実な場合

/----------------------------------------\ 
| ORIGINAL_BOOK_CONV | CURRENT_BOOK_CONV | 
|--------------------+-------------------| 
| 0.00    | 0.00    | 
| 1.10    | 6.50    | 
| 5.79    | 6.32    | 
| 12.00    | 54.00    | 
| 876.76    | 423.75   | 
\----------------------------------------/ 

CREATE TABLE dn (
    ORIGINAL_BOOK NUMERIC(28,3), 
    CURRENT_BOOK NUMERIC(28,3) 
) 

INSERT INTO dn 
SELECT 876.76, 423.75 
UNION 
SELECT 0, 0 
UNION 
SELECT 1.1, 6.5 
UNION 
SELECT 12, 54 
UNION 
SELECT 5.789, 6.321 

SELECT CAST(dn.ORIGINAL_BOOK AS DECIMAL(28,2)) AS ORIGINAL_BOOK_CONV, 
     CAST(dn.CURRENT_BOOK AS DECIMAL(28,2)) AS CURRENT_BOOK_CONV 
FROM dn 

DROP TABLE dn 

は結果が得られます小数点以下桁数scale> 0)、テーブルのCREATE TABLEスクリプト(SSMSから取得できます)またはColumnリストのスクリーンショットを投稿して、基礎となるフィールドの実際のタイプを確認してください。また、CASTがないフィールドから値SELECTが表示されていることを確認すると、データがどのように変換されずに表示されるかがわかります。

関連する問題