カテゴリ:

数値関数 (四捨五入と切り捨て)

TRUNCATE , TRUNC

入力式をゼロに近い(または等しい)値に丸めます。scaleパラメーターに指定した値によって、変換すると次を削除できます。

  • 小数点以下のすべての桁。整数値を生成します。これは、 TRUNC における数値のデフォルトかつ最も一般的な使い方です。

  • 小数点以下の有効桁数の一部。精度の低い値を生成します。

  • 小数点以下のすべての有効桁数と、小数点左側の一部の有効桁数。10、100、またはその他の10の累乗の倍数となる値を生成します。

TRUNCATE および TRUNC 関数は同義語です。

注釈

TRUNC はオーバーロードされます。また、日付/時刻値と共に使用して、 日付、時刻、タイムスタンプ を指定した部分で切り捨てることもできます。数値の TRUNC には、必須のパラメーターが1つと、オプションのパラメーターが1つあります。日付/時刻の TRUNC には2つのパラメーターが必要です。

こちらもご参照ください。

CEILFLOORROUND

構文

TRUNCATE( <input_expr> [ , <scale_expr> ] )

TRUNC( <input_expr> [ , <scale_expr> ] )
Copy

引数

input_expr

操作する値または式です。データ型は、 FLOAT や NUMBER のような数値データ型のいずれかでなければなりません。

scale_expr

小数点以下の桁数。-38から+38までの整数に評価される式を使用します。

デフォルトでは、 scale_expr はゼロになっています。これは、関数が小数点以下のすべての数字を削除することを意味します。

ネガティブスケールに関する情報は、以下の 使用上の注意 をご参照ください。

戻り値

返される値のデータ型は NUMBER(精度、スケール)です。

入力スケールがゼロ以上の場合、出力スケールは通常入力スケールと一致します。

入力スケールが負の場合、出力スケールは0です。

例:

  • TRUNCATE(3.14, 1) が返すデータ型は NUMBER(4, 1) です。

  • TRUNCATE(3.14, 0) が返すデータ型は NUMBER(4, 0) です。

  • TRUNCATE(33.33, -1) が返すデータ型は NUMBER(5, 0) です。

スケールがゼロの場合、値は事実上整数になります。

使用上の注意

  • scale_expr が負の場合、数値を調整する小数点の の場所の数を指定します。例えば、スケールが-2の場合、結果は100の倍数になります。

  • scale_expr が入力式のスケールよりも大きい場合、関数は効果がありません。

  • input_expr または scale_expr のいずれかが NULL の場合、結果は NULL です。

  • 切り捨ては、少数ではなく0に向かって行われます。例えば、 TRUNCATE(-9.6)-9 となり、 -10 とはなりません。

以下の例では、 TRUNC 関数を数値に対して使用しています。日付、時刻、タイムスタンプの切り捨ての例については、 TRUNC の日付/時刻形式 をご参照ください。

例はこのサンプルテーブルのデータを使用しています。このテーブルには、-975.975と135.135という2つの異なる10進数と、 TRUNC 関数でscaleパラメーターに使用する異なる値が含まれています。

CREATE TABLE numeric_trunc_demo (n FLOAT, scale INTEGER);
INSERT INTO numeric_trunc_demo (n, scale) VALUES
   (-975.975, -1), (-975.975,  0), (-975.975,  2),
   ( 135.135, -2), ( 135.135,  0), ( 135.135,  1),
   ( 135.135,  3), ( 135.135, 50), ( 135.135, NULL);
Copy

scaleパラメーターを指定しない場合、 TRUNC に数値パラメーターを指定したときのデフォルトの動作は、パラメーターと等しいかゼロに近い整数値を返します。scaleパラメーターに0を指定しても同じです。

SELECT DISTINCT n, TRUNCATE(n)
  FROM numeric_trunc_demo ORDER BY n;
Copy
+----------+-------------+
|        N | TRUNCATE(N) |
|----------+-------------|
| -975.975 |        -975 |
|  135.135 |         135 |
+----------+-------------+

次の例は、 TRUNC 関数をゼロ、正の値、負の値のscaleパラメーターで呼び出した場合の、正の数と負の数に対する結果を示しています。

  • scaleパラメーターにゼロを指定すると、小数点以下のすべての桁が削除され、整数値が生成されます。

  • 正のscaleパラメーターを指定すると、小数点以下の有効桁数の指定した数字が残ります。

  • 負のscaleパラメーターを指定すると、小数点の左側の指定された桁数分の数字がゼロに置き換えられます。

  • 38より大きい、または-38より小さいscaleを指定することは、+38または-38を指定することと同じです。

SELECT n, scale, TRUNC(n, scale)
  FROM numeric_trunc_demo ORDER BY n, scale;
Copy
+----------+-------+-----------------+
|        N | SCALE | TRUNC(N, SCALE) |
|----------+-------+-----------------|
| -975.975 |    -1 |        -970     |
| -975.975 |     0 |        -975     |
| -975.975 |     2 |        -975.97  |
|  135.135 |    -2 |         100     |
|  135.135 |     0 |         135     |
|  135.135 |     1 |         135.1   |
|  135.135 |     3 |         135.135 |
|  135.135 |    50 |         135.135 |
|  135.135 |  NULL |            NULL |
+----------+-------+-----------------+