小数点以下2桁の数値を書き込むSQLサーバー


回答:


213

これを試して

SELECT CONVERT(DECIMAL(10,2),YOURCOLUMN)

2
これが10年前の答えだった場合、それはもうありません。このメソッドは10.11111を10.00に変換します。
Jonathon Cowley-Thom

SELECT CONVERT(DECIMAL(10,2)、10.11111)を試してみたところ、SELECT CONVERT(DECIMAL(10,2)、 '10.11111')に対して10.11と同じ結果が返されました
。SQLServer

70

Str()関数を使用します。これは、3つの引数(数値、表示する合計文字数、および表示する小数点以下の桁数)を取ります

  Select Str(12345.6789, 12, 3)

表示: '12345.679'(3つのスペース、5桁の12345、小数点、および3つの小数点(679)-切り捨てが必要な場合は丸めます(整数部分が合計サイズに対して大きすぎる場合を除く)。代わりにアスタリスクが表示されます。)

合計が12文字で、小数点の右側が3文字です。


1
it rounds if it has to truncate...整数部分が合計サイズに対して大きすぎる場合を除き、代わりにアスタリスクが表示されます。これはのドキュメントにSTR記載されています。ここでは、そのページからの引用です:STR(1223,2) truncates the result set to **.
マーク・バイヤーズ

36

一般に、パラメーターで定義することにより、SQLで数値の精度を定義できます。ほとんどの場合、これはNUMERIC(10,2)またDecimal(10,2)はであり、列を、精度が2(小数点以下の桁数)の合計10桁の数値として定義します。

明確にするために編集


4
DECIMAL(10、2)として宣言することもできます。
jrcs3 2009年

10
これはいくつかの理由で間違っています。数値ではなく、数値または10進数です。あなたはnumeric(10,2)が小数点の前に10桁を許すと言いますが、これも間違っています。numeric(10,2)では、小数点以下2桁の合計10桁を使用できます。範囲= -99999999.99〜99999999.99
George Mastros、2009年

@G Mastros:あなたは正確な点で正しいようです。規約の実際の命名では、多くのSQL実装でNUMBERは有効なタイプです。sqlserverのケースを知らないことは認めますが、
AAAは

@GMastrosも同じことを言うようになりました。msdn.microsoft.com/en-us/library/aa258832%28v=sql.80%29.aspx
Joe


15

これが今日の子供たちのやり方です。

DECLARE @test DECIMAL(18,6) = 123.456789
SELECT FORMAT(@test, '##.##')

123.46


1
FORMAT機能は、バージョン2012以降で使用できます。
user1263981 2018

または:SELECT FORMAT(@test、 '。##')
java-love

入力されたデータであった場合: DECLARE @test DECIMAL(18,6) = 0.456789 その後、SELECT FORMAT(@test, '##.##')戻っ: .46 どのようにそれは、先行ゼロを表示するのですか: 0.46
luisdev

先頭の0を取得するには、SELECT FORMAT(@test、 '#0。##')を試してください
ClubbieTim

14

小数点以下2桁のみが必要な場合は、最も簡単な方法です。

SELECT CAST(12 AS DECIMAL(16,2))

または

SELECT CAST('12' AS DECIMAL(16,2))

出力

12.00

7

数値を切り捨てるのではなく丸めても問題ない場合は、次のようになります。

ROUND(column_name,decimals)

2

これを試して:

 declare @MyFloatVal float;

    set @MyFloatVal=(select convert(decimal(10, 2), 10.254000))

    select  @MyFloatVal

    Convert(decimal(18,2),r.AdditionAmount) as AdditionAmount

0

挿入する値(例2.99)に100を掛けます

次に、結果の100による除算を末尾に.01を追加して挿入します。

299.01/100

0

これにより、小数点以下2桁の合計10桁が許可されます。これは、10進数の前の値の値を8桁まで、10進数の後に2を収容できることを意味します。

検証するには、次のクエリに値を入力します。

DECLARE vtest  number(10,2);
BEGIN
SELECT 10.008 INTO vtest FROM dual;
dbms_output.put_line(vtest);
END;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.