【SQL SERVER】 四捨五入・切り捨て・切り上げについて

四捨五入・切り捨て・切り上げについての備忘録。

SQL SERVERのSQLを書いているとたまに「四捨五入」・「切り捨て」・「切り上げ」を取得時にしたい時があります。
本来生データの精度は、できる限る取得できる最大限の精度で保存したいものですが、使用する時にそこまで必要ない場合などありますし。

で、四捨五入・切り捨て・切り上げに使える関数ですが、
四捨五入には 「ROUND」
切り捨てには、「CEILING」
切り上げには、「FLOOR 」を使います。

ROUNDは、以下のようにでパラメターを3つ使います。
ROUND(四捨五入したい数値, 有効桁数[, 0 – 四捨五入、0 以外- 切捨て。 オプショナルでデフォルトは 0 ])
有効桁数は(0が1の位、1が小数点第1位、2が小数点第2位、3が小数点第3位、マイナス方向は-1であれば10の位、-2であれば100の位-3であれば1,000の位のようになります。

例えば、以下のようになります。

SELECT ROUND(1234.1234, -3) --> 1000.0000
SELECT ROUND(1234.1234, -2) --> 1200.0000
SELECT ROUND(1234.1234, -1) --> 1230.0000
SELECT ROUND(1234.1234, 0) --> 1234.0000
SELECT ROUND(1234.1234, 1) --> 1234.1000
SELECT ROUND(1234.1234, 2) --> 1234.1200
SELECT ROUND(1234.1234, 3) --> 1234.1230

3つめのパラメータを設定すると

SELECT ROUND(1555.1234, -3,0) --> 2000.0000
SELECT ROUND(1555.1234, -3,1) --> 1000.0000

FLOORとCEILINGはパラメターを1つだけで、そのまま整数値に切り捨て・切り上げしてくれます。

切り捨て(FLOOR)
例えば、以下のようになります。

SELECT FLOOR(1234.1234) --> 1234
SELECT FLOOR(1234.5678) --> 1234

FLOORとCEILINGは整数値に切り捨て・切り上げするので、小数点で切り上げ切り捨てを使うには、少し工夫が必要です。
まぁ、工夫と言っても桁を合わせてあげるだけですが。
例えば、以下のようになります。

SELECT FLOOR((1234.1234 * 10)) / 10 --> 1234.100000
SELECT FLOOR((1234.5678 * 100)) / 100 --> 1234.560000

切り上げ(CEILING)

SELECT CEILING(1234.1234) --> 1235
SELECT CEILING(1234.5678) --> 1235

SELECT CEILING(1234.1234 * 10) / 10 --> 1234.200000
SELECT CEILING(1234.5678 * 100) / 100 --> 1234.570000

以上、四捨五入・切り捨て・切り上げについての開発備忘録でした。