【SQL Server】ROUND(四捨五入・切り捨て)

SQL Server
この記事は約3分で読めます。

ROUND(四捨五入・切り捨て)

概要

SQL ServerのROUND関数は、四捨五入で丸め、または、切捨てをするのに使います。基本式は下記の通り

SELECT ROUND(概数,有効桁数,[数字])

概数 

四捨五入する対象の数字

有効桁数

0:小数点なし(少数第1位を四捨五入)
1:小数第1まで(少数第2位を四捨五入)
2:小数第2まで(少数第3位を四捨五入)
-1:整数1の位を四捨五入
-2:整数10の位を四捨五入

数字

0かそれ以外の数字を指定しますが、
面倒なので0か1を指定すると覚えてください。
0を指定すると四捨五入、1を指定すると切捨てします。
※第3引数は省略可能で省略すると、0 を指定した時と同じ事になります。

実際に試してみます

実際に試してみる方が理解が早いです。

--小数点第1位まで
SELECT ROUND(123.00,1) -- 123.00
SELECT ROUND(123.04,1) -- 123.00
SELECT ROUND(123.05,1) -- 123.10
SELECT ROUND(123.06,1) -- 123.10

--小数点第2位まで
SELECT ROUND(123.06,2) -- 123.06

--小数点は不要
SELECT ROUND(123.40,0)-- 123.00
SELECT ROUND(123.50,0)-- 124.00

--一の位は不要
SELECT ROUND(124.00,-1)-- 120.00
SELECT ROUND(125.00,-1)-- 130.00

--十の位は不要
SELECT ROUND(141.00,-2)-- 100.00
SELECT ROUND(151.00,-2)-- 200.00

-- 四捨五入したい ※第3引数に ”0” を指定する
SELECT ROUND(123.05,1,0)-- 123.10

-- 切り捨てしたい ※第3引数に ”0” 以外を指定する
SELECT ROUND(123.05,1,1)-- 123.00

問題点

問題点は

「四捨五入」と「切り捨て」の丸め は出来ましたが、問題は「切り上げ」の丸めが出来ないことです。

システム関数であるCEILING関数を使えば小数点以下の切り上げは出来ます。

CEILING関数

引数の数式以上で最小の整数を返す

小数点を切り上げる

--小数点を切り上げる
SELECT CEILING(123.0)--123
SELECT CEILING(123.1)--124
SELECT CEILING(123.01)--124
SELECT CEILING(123.001)--124

小数点第2位を切り上げて小数点第1位まで求める

ROUND関数とCEILING関数を使います

--小数点第2位を切り上げる
SELECT CEILING(ROUND(123.00,2,1) * 10) / 10  --123.000000
SELECT CEILING(ROUND(123.01,2,1) * 10) / 10  --123.100000
SELECT CEILING(ROUND(123.001,2,1) * 10) / 10  --123.100000

ちょっと面倒くさいですね。

そのうち引数が追加されてオプションで対応されそうな気がします。

小数点第3位を切り上げる方法も記載

--小数点第3位を切り上げる
SELECT CEILING(ROUND(123.000,3,1) * 100) / 100  --123.000000
SELECT CEILING(ROUND(123.001,3,1) * 100) / 100  --123.100000
SELECT CEILING(ROUND(123.0001,3,1) * 100) / 100  --123.100000

 

コメント

タイトルとURLをコピーしました