210

四捨五入せずに SQL で余分な小数点以下を切り捨てるか削除する最良の方法を決定しようとしています。例えば:

declare @value decimal(18,2)

set @value = 123.456

これは自動的に に丸め@valueられ123.46、ほとんどの場合に適しています。ただし、このプロジェクトでは、それは必要ありません。不要な小数点以下を切り捨てる簡単な方法はありますか? left()関数を使用して 10 進数に戻すことができることはわかっています。他の方法はありますか?

4

21 に答える 21

298
ROUND ( 123.456 , 2 , 1 )

3番目のパラメーター!= 0の場合、丸めるのではなく切り捨てられます

http://msdn.microsoft.com/en-us/library/ms175003(SQL.90).aspx

構文

ROUND ( numeric_expression , length [ ,function ] )

引数

  • numeric_expression ビットデータ型を除いて、正確な数値または近似数値のデータ型カテゴリの式です。

  • length numeric_expressionが丸められる精度です。長さは、tinyint、smallint、またはint型の式である必要があります。lengthが正の数の場合、numeric_expressionはlengthで指定された小数点以下の桁数に丸められます。lengthが負の数の場合、numeric_expressionは、lengthで指定されているように、小数点の左側で丸められます。

  • function 実行する操作のタイプです。関数はtinyint、smallint、またはintでなければなりません。関数が省略されているか、値が0(デフォルト)の場合、numeric_expressionは丸められます。0以外の値を指定すると、numeric_expressionは切り捨てられます。
于 2008-09-04T16:11:32.783 に答える
203
select round(123.456, 2, 1)
于 2008-09-04T15:54:24.090 に答える
44
SELECT Cast(Round(123.456,2,1) as decimal(18,2))
于 2009-05-05T19:58:28.967 に答える
13

丸めずに切り捨てることができた方法は次のとおりです。

select 100.0019-(100.0019%.001)

100.0010 を返します

そしてあなたの例:

select 123.456-(123.456%.001)

123.450 を返します

末尾のゼロを取り除きたい場合は、単純にキャストします。

select cast((123.456-(123.456%.001)) as decimal (18,2))

123.45 を返します

于 2009-02-12T22:54:22.717 に答える
8

小数が必要ですか?

そうでない場合は、使用します

select ceiling(@value),floor(@value)

0 でそれを行う場合は、ラウンドを行います。

select round(@value,2)
于 2008-09-04T15:57:42.117 に答える
7

Roundにはオプションのパラメータがあります

Select round(123.456, 2, 1)  will = 123.45
Select round(123.456, 2, 0)  will = 123.46
于 2009-11-12T22:33:24.257 に答える
4

これにより、任意の数値の小数部分が削除されます

SELECT ROUND(@val,0,1)
于 2009-12-11T11:11:58.543 に答える
3
ROUND(number, decimals, operation)

番号 => 必須。小数点以下を四捨五入する数値
=> 必須。数値を演算に丸める小数点以下の桁数
=> オプション。0 の場合、結果を小数に丸めます。0 以外の値の場合、結果は小数点以下の桁数に切り捨てられます。デフォルト値は 0 です

SELECT ROUND(235.415, 2, 1)

あなたにあげます235.410

SELECT ROUND(235.415, 0, 1)

あなたにあげます235.000

しかし、今ではトリミング0を使用できますcast

SELECT CAST(ROUND(235.415, 0, 1) AS INT)

あなたにあげます235

于 2020-12-11T16:49:51.427 に答える
1

別の方法はODBC TRUNCATE機能です:

DECLARE @value DECIMAL(18,3) =123.456;

SELECT @value AS val, {fn TRUNCATE(@value, 2)} AS result

LiveDemo

出力:

╔═════════╦═════════╗
║   val   ║ result  ║
╠═════════╬═════════╣
║ 123,456 ║ 123,450 ║
╚═════════╩═════════╝

述べる:

3 番目のパラメーターを 1 に設定して組み込みROUND関数を使用することをお勧めします。

于 2016-04-13T18:44:12.107 に答える
0

次のコードを使用して、ポイントの後の3つの小数点以下の値を小数点以下2桁に変換してみてください。

declare @val decimal (8, 2)
select @val = 123.456
select @val =  @val

select @val

出力は123.46です

于 2009-07-01T07:09:37.410 に答える
0

小数値のみが必要だと思います。この場合、次を使用できます。

declare @val decimal (8, 3)
SET @val = 123.456

SELECT @val - ROUND(@val,0,1)
于 2009-11-20T11:16:17.937 に答える
-3

Mod(x,1)私が思う最も簡単な方法です。

于 2009-10-21T22:02:01.247 に答える
-5
select convert(int,@value)
于 2008-09-04T15:52:24.873 に答える