Oracle SQL 四捨五入・切り上げ・切り捨てをする - ROUND、TRUNC、ROUNDUP 関数
Oracle SQL で数値を四捨五入・切り上げ・切り捨てをする方法です。
四捨五入・切り上げ・切り捨ては、外貨を扱う場合や、消費税の計算など、実務の様々な場面で使います。数値の四捨五入、切り捨てをする場合は、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 で数値を四捨五入・切り上げ・切り捨てをする方法を紹介しました。
ここに記載されているのソースの利用や変更は自由ですが、こちらでは一切の保障ができませんので、自己責任にてお願い致しますね。
おつかれさまでした。