コマンド道場

$ man trunc

TRUNC

数値関数

数値を切り捨てる。四捨五入する ROUND とは結果が変わる。

呼び出しの形

TRUNC(数値)
TRUNC(数値, 桁数)

つまずきやすいところ

  • 負の数では FLOOR と結果が違います。 TRUNC は 0 に近づけ、FLOOR は小さいほうへ落とします。

  • TRUNC は標準 SQL ではありません。SQL Server には無く、ROUND(値, 桁, 1) の第 3 引数で切り捨てを指定します。

  • 「切り捨て」と書かれた要件に ROUND を使うと、金額が 1 円ずれます。要件の言葉と関数の対応を先に決めてください。

実行例

結果は実際に流したものです。同じ SQL を 自由に打てる画面 で試すと、同じ結果になります。

切り捨て・四捨五入・床・天井を並べる
SELECT TRUNC(1.9) AS kirisute, ROUND(1.9) AS shishagonyu, TRUNC(-1.5) AS fu_no_trunc, FLOOR(-1.5) AS fu_no_floor, CEIL(-1.5) AS fu_no_ceil
kirisuteshishagonyufu_no_truncfu_no_floorfu_no_ceil
12-1-2-1

1

負の数では TRUNC と FLOOR の結果が違います。

小数第 2 位までで比べる
SELECT ROUND(AVG(salary), 2) AS marume, TRUNC(AVG(salary), 2) AS kirisute FROM shain
marumekirisute
542002.78542002.77

1

説明

TRUNC は数値を切り捨てますROUND が四捨五入するのに対し、TRUNC は端数を単純に落とします。

⚠️ 負の数での違いに注意してください。TRUNC0 に近づける方向に落とすので、-1.5-1 になります。床関数の FLOOR小さいほうへ落とすので -2 です。正の数では同じ結果になるため、負の値が来て初めて食い違いが表面化します。

消費税や手数料の計算では「切り捨て」が指定されることが多く、ROUND を使うと 1 円ずれます。要件の言葉をどの関数に対応させるかを、設計の段階で決めておいてください。

次に読む

関係する関数

根拠にした一次情報