Oracle SQL 四捨五入・切り上げ・切り捨てをする - ROUND、TRUNC、ROUNDUP 関数

Oracle SQL で数値を四捨五入・切り上げ・切り捨てをする方法です。

Oracle SQL 四捨五入・切り上げ・切り捨てをする - ROUND、TRUNC、ROUNDUP 関数

四捨五入・切り上げ・切り捨ては、外貨を扱う場合や、消費税の計算など、実務の様々な場面で使います。数値の四捨五入、切り捨てをする場合は、ROUND 関数、または、TRUNC 関数を使用します。

Oracle SQL では、切り上げについて標準の関数が用意されていません。独自の関数を作成して対応します。

数字の端数を切り捨てる事を「丸める」といいます。

ここでは Oracle SQL で数値を四捨五入・切り上げ・切り捨てをする方法 を紹介します。


利用関数

利用する関数は3つです。

関数処理利用方法
ROUND四捨五入ROUND( 数値 ,[小数桁] )
TRUNC切り捨てTRUNC( 数値 ,[小数桁] )
ROUNDUP切り上げROUNDUP( 数値 ,[小数桁] )

引数の [小数桁] には、負の値を指定することも可能です。負の値を [少数桁] に指定すると、整数部が四捨五入・切り捨て・切り上げされます。

使い方

使い方はとても簡単です。以下の要領でSQLを実行してください。

小数点第 1 位で四捨五入する

SELECT
 ROUND(12345.678)
FROM DUAL

Return : 12346

小数点第 2 位で四捨五入する

SELECT
 ROUND(12345.678,1)
FROM DUAL

Return : 12345.7

整数部 1 桁目を四捨五入する

SELECT
 ROUND(12345.678,-1)
FROM DUAL

Return : 12350

小数点第 1 位で切り捨てする

SELECT
 TRUNC(12345.678)
FROM DUAL

Return : 12345

小数点第 2 位で切り捨てする

SELECT
 TRUNC(12345.678,1)
FROM DUAL

Return : 12345.6

整数部 2 桁目を切り捨てする

SELECT
 TRUNC(12345.678,-1)
FROM DUAL

Return : 12340

切り上げの関数

Oracle SQL では、切り上げについて標準の関数が用意されていません。独自の関数を作成して対応します。

/**
 * 小数点以下もしくは整数部を切り上げします。
 * 
 * 引数1: in_num   数値
 * 引数2: [in_digit] 小数値、負の値を指定すると整数部を切り上げします。
 * 戻り値: 切り上げした数値
 * 
 * 使い方サンプル:
 *  SELECT ROUNDUP(123.456) FROM DUAL    > 124
 *  SELECT ROUNDUP(123.456,1) FROM DUAL  > 123.5
 *  SELECT ROUNDUP(123.456,-1) FROM DUAL > 130
 * 作成者: Ken, https://www.saka-en.com/
 * バージョン: 1.0
 */
CREATE OR REPLACE FUNCTION ROUNDUP (
  in_num    IN  NUMBER,       -- 数値
  in_digit  IN  INTEGER := 0  -- 小数桁
) RETURN NUMBER
IS
  wk_value  NUMBER;
BEGIN
  IF in_num IS NULL THEN
    RETURN NULL;
  END IF;
  IF in_num = 0 THEN
    RETURN 0;
  END IF;
  wk_value := NVL(10 ** in_digit,1);
  RETURN CEIL(ABS(in_num) * wk_value) / wk_value * SIGN(in_num);

EXCEPTION
  WHEN OTHERS THEN
    RETURN NULL;
END ROUNDUP;

ORACLE 11g で Excel の ROUNDUP 関数との比較テストを実施しました。

小数点第 1 位で切り上げする

SELECT
 ROUNDUP(123.456)
FROM DUAL

Return : 124

小数点第 2 位で切り上げする

SELECT
 ROUNDUP(123.456,1)
FROM DUAL

Return : 123.5

整数部 2 桁目を切り上げする

SELECT
 ROUNDUP(123.456,-1)
FROM DUAL

Return : 130

まとめ

Oracle SQL で数値を四捨五入・切り上げ・切り捨てをする方法を紹介しました。

ここに記載されているのソースの利用や変更は自由ですが、こちらでは一切の保障ができませんので、自己責任にてお願い致しますね。

おつかれさまでした。

この記事がお役に立ちましたら シェア をお願いいたします。