あなただけの関係フィールドのタイプは、ソース・フィールドは本当にただ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
が表示されていることを確認すると、データがどのように変換されずに表示されるかがわかります。
'CURRENT_BOOK'のデータタイプは何ですか?そこに値はどのように格納されていますか?これが文字列の値であれば小数点を区切るためにドットやコンマなどの文化固有の違いを見てください... – Shnugo
小数点はどのように_invisible_ですか?書かれているように、 'CASE'式は常に小数点以下2桁(またはNULL)の値を返します。あなたはその価値によって何をしていますか? – HABO
ORIGINAL_BOOKフィールドとCURRENT_BOOKフィールドの両方 – jason