2014-01-12 13 views
8

Round,FloorおよびCeilのようなT-SQLの丸め関数をすべて読んでいますが、10進数は正しく切り捨てられていません。SQL Server 2008で小数点以下を切り捨てます

私は2つの質問持っている10進数(3.69 ==>3.5)を切り捨てる方法

  1. を?
  2. 整数の最後の3桁を切り上げる方法(例:142600 ==>143000)?
+0

udfと記述してください。 –

答えて

6

1)select CAST(FLOOR(2 * 3.69)/2 AS decimal(2, 1))は、最初のケースを処理する - 私は適合かつ迅速に確認answer to a similar question on SQL Server Forumsの礼儀。

なお、あなたが最も近い0.5に丸めている数字があることができれば、より大きな(例えば333.69 =>333.5)、あなたはキャストすると、よりdecimal精度を指定してください(例:select CAST(FLOOR(2 * 3.69)/2 AS decimal(10, 1)))、またはあなたがオーバーフローエラーを得ることができます:

Msg 8115, Level 16, State 8, Line 1 
Arithmetic overflow error converting numeric to data type numeric. 

エクストラ精度(すなわちselect CAST(FLOOR(2 * 3.69)/2 AS decimal(10, 1))select CAST(FLOOR(2 * 3.69)/2 AS decimal(2, 1))両方が3.5をもたらす)ボトムラインの結果に影響を及ぼさないであろう。丸めている数字が常に小さくなると無駄です。

T-SQL FLOOR,CASTおよびdecimalを参考にして、参考資料をオンラインで参照できます。

2)select ROUND(142600, -3)が第2のケースを処理します。

同様のオンラインリファレンスがT-SQL ROUNDで利用可能です。 J0e3ganのanwser @ 1として

+1

ありがとうございましたJ0e3gan.Itは正しく動作します! –

1

Sql Server's Roundは、例えば、長さが10^(-length)あるlengthパラメータを用いて、10の最も近いパワーに丸めることができ

length = 0 : 10^0 = nearest 1 
length = 3 : 10^-3 = nearest .001 
length = -3 : 10^3 = nearest 1000 

など

しかし、単純な1ベースの丸め機能と、一般的に - 例えば(長さを持つSQLラウンド= 0)「に最も近いN」の任意の値に丸める - 式で:

round(X/N) * N 

例えば最寄りの100

select round(12345/100.0, 0) * 100.0 -- 12300 
select round(-9876/100.0, 0) * 100.0 -- -9900 
select round(-9849/100.0, 0) * 100.0 -- -9800 

...最寄りの0.5

select round(5.123/0.5, 0) * 0.5 -- 5.000 
select round(6.499/0.5, 0) * 0.5 -- 6.500 
select round(-4.499/0.5, 0) * 0.5 -- -4.50 

...最寄りの0.02

select round(5.123/.02, 0) * .02 -- 5.12 
select round(-9.871/.02, 0) * .02 -- -9.88 

など

除数のために使用されるタイプが数値でなければならないことに注意してください/小数または浮動小数点数。

+0

あなたのreply.allコードありがとうございます –

0

Oracle/PLSQL FLOOR関数は、数値以下の最大の整数値を返します。 例:

FLOOR(7.9) 
Result: 7 

FLOOR(30.29) 
Result: 30 

FLOOR(-7.9) 
Result: -8 
関連する問題