端数処理関数

ORACLE
20160103-1

ORACLEには端数処理関数がいくつかあります。似た機能の関数もあります。正しく使い分けられていますか?

スポンサーリンク

TRUNC・ROUND

TRUNCは、端数の切捨てを行う関数です。
ROUNDは、端数を四捨五入を行う関数です。(銀行丸めではないので注意)

SELECT a,TRUNC(a),ROUND(a) FROM test_table;
 
         A   TRUNC(A)   ROUND(A)
---------- ---------- ----------
       5.4          5          5
       5.5          5          6
      -5.4         -5         -5
      -5.5         -5         -6
スポンサーリンク

CEIL・FLOOR

CEILは、端数の切上げを行う関数です。負数の場合に注意、大きい方へ丸めます。
FLOORは、端数の切捨てを行う関数です。負数の場合に注意、小さい方へ丸めます。

SELECT a,CEIL(a),FLOOR(a) FROM test_table;
 
         A    CEIL(A)   FLOOR(A)
---------- ---------- ----------
       5.4          6          5
       5.5          6          5
      -5.4         -5         -6
      -5.5         -5         -6

TRUNC・ROUNDとCEIL・FLOORの違い

違いの1点目は、TRUNCとROUNDは、指定した桁位置で端数処理をすることが出来るのに対し、CEIL・FLOORは整数に丸めることしかできない点です。
TRUNCとROUNDの桁位置の指定は、2番目の引数で行います。0は整数に(デフォルト)、1は小数点以下1位に、-1は整数10の位に丸めることを意味します。

SELECT a,TRUNC(a),TRUNC(a,0),TRUNC(a,1),TRUNC(a,-1) FROM test_table;
 
         A   TRUNC(A)   TRUNC(A,0)   TRUNC(A,1)  TRUNC(A,-1)
---------- ---------- ------------ ------------ ------------
     55.55         55           55         55.5           50

違いの2点目は、TRUNCとFLOORの違いです。指定した桁で丸められか否かという点以外に、負数の場合の扱いが異なります。
TRUNCは、指定した値を0に近い方へ丸めます。
FLOORは、指定した値を小さい方へ丸めます。

SELECT a,TRUNC(a),FLOOR(a) FROM test_table;
 
         A   TRUNC(A)   FLOOR(A)
---------- ---------- ----------
       5.5          5          5
      -5.5         -5         -6

負数の場合のTRUNCとFLOORの違いやCEILの挙動は、特に注意が必要です。

まとめ

端数処理は金額等の重要な項目で使用することも多く、重い障害につながる可能性があります。
ぜひ覚えておきましょう。

関連

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