ROUND・TRUNCファンクションについて

Oracle Master Silver

ROUNDとTRUNCファンクションは、Oracle SQLで値を調整するために便利なツールです。この記事では、その使い方と用途を初心者にもわかりやすく解説します。さらに、数値だけでなく日付型のデータに対する適用例も含め、実務での活用法を紹介します。

本記事ではSCOTTサンプルスキーマを使用した例で解説します。
SCOTTサンプルスキーマは以下を実行することでインポートおよび使用が可能です。

$ sqlplus / as sysdba
SQL> @?/rdbms/admin/utlsampl.sql
$ sqlplus scott/tiger

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?


ROUNDファンクション

ROUNDは、数値や日付を「四捨五入」して調整します。第二引数に指定した位で四捨五入されます。指定しない場合は小数点第一位で四捨五入されます。

ROUNDの構文

SELECT ROUND(数値, 調整する位) FROM テーブル;

数値に対する実例

以下のクエリは、職員の給与を十位単位で四捨五入します。

SELECT empno, sal, ROUND(sal, -1) AS rounded_sal
FROM emp
WHERE empno=7566;

実行結果

SQL> SELECT empno, sal, ROUND(sal, -1) AS rounded_sal
2 FROM emp
3 WHERE empno=7566;

EMPNO SAL ROUNDED_SAL
---------- ---------- -----------
7566 2975 2980

日付に対する実例

ROUNDは日付の調整にも使用できます。以下の例では、日付を最も近い月に丸めます。

SELECT hiredate, ROUND(hiredate, 'MONTH') AS rounded_date
FROM emp;

実行結果

SQL> SELECT hiredate, ROUND(hiredate, 'MONTH') AS rounded_date
2 FROM emp;

HIREDATE ROUNDED_DA
---------- ----------
1980-12-17 1981-01-01
1981-02-20 1981-03-01
1981-02-22 1981-03-01
1981-04-02 1981-04-01
1981-09-28 1981-10-01
1981-05-01 1981-05-01
1981-06-09 1981-06-01
1987-04-19 1987-05-01
1981-11-17 1981-12-01
1981-09-08 1981-09-01
1987-05-23 1987-06-01
1981-12-03 1981-12-01
1981-12-03 1981-12-01
1982-01-23 1982-02-01

14 rows selected.

ROUNDのメモ

  • 数値型: 小数点以下を指定して調整可能。
  • 日付型: ‘YEAR’や’MONTH’といった日時フォーマットを指定可能。
  • 財務計算やデータの丸め処理でよく使われます。

TRUNCファンクション

TRUNCは、値を「切り捨て」て調整します。ROUNDとの違いは、値を四捨五入せずに指定した位で切り捨てることです。

TRUNCの構文

SELECT TRUNC(数値, 切り捨てる位) FROM テーブル;

数値に対する実例

以下のクエリは、職員の給与を十位単位で切り捨てます。

SELECT empno, sal, TRUNC(sal, -1) AS truncated_sal
FROM emp
WHERE empno=7566;

実行結果

SQL> SELECT empno, sal, TRUNC(sal, -1) AS truncated_sal
2 FROM emp
3 WHERE empno=7566;

EMPNO SAL TRUNCATED_SAL
---------- ---------- -------------
7566 2975 2970

日付に対する実例

日付を切り捨てることも可能です。以下の例では、日付を月の初日に切り捨てます。

SELECT hiredate, TRUNC(hiredate, 'MONTH') AS truncated_date
FROM emp;

実行結果

SQL> SELECT hiredate, TRUNC(hiredate, 'MONTH') AS truncated_date
2 FROM emp;

HIREDATE TRUNCATED_
---------- ----------
1980-12-17 1980-12-01
1981-02-20 1981-02-01
1981-02-22 1981-02-01
1981-04-02 1981-04-01
1981-09-28 1981-09-01
1981-05-01 1981-05-01
1981-06-09 1981-06-01
1987-04-19 1987-04-01
1981-11-17 1981-11-01
1981-09-08 1981-09-01
1987-05-23 1987-05-01
1981-12-03 1981-12-01
1981-12-03 1981-12-01
1982-01-23 1982-01-01

14 rows selected.

TRUNCのメモ

  • 数値型: 減点なしで値を切り捨てる場合に適用。
  • 日付型: 日付を特定の単位で切り捨て可能。
  • 情報の粒度調整やデータ分析で有用。

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?


ROUNDとTRUNCの違い

項目ROUNDTRUNC
動作四捨五入する切り捨てる
主な用途正確な丸め計算粒度調整
日付対応可能可能

注意点

  • ROUNDは小数点以下の丸め計算に適し、TRUNCは値の単純な切り捨てに向いています。
  • 必要な位の指定を間違えると意図しない結果になる可能性があるため、要注意です。

おわりに

ROUNDとTRUNCは、数値や日付データの調整において非常に便利なファンクションです。それぞれの特性を理解し、実際のシステム設計やデータ処理で適切に活用してください。特に、日付データに対する応用は多岐にわたるため、ぜひ試してみてください。

[参考]
Oracle Database SQL言語リファレンス 19c

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?

コメント

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