$ 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
| kirisute | shishagonyu | fu_no_trunc | fu_no_floor | fu_no_ceil |
|---|---|---|---|---|
| 1 | 2 | -1 | -2 | -1 |
1 行
負の数では TRUNC と FLOOR の結果が違います。
SELECT ROUND(AVG(salary), 2) AS marume, TRUNC(AVG(salary), 2) AS kirisute FROM shain
| marume | kirisute |
|---|---|
| 542002.78 | 542002.77 |
1 行
説明
TRUNC は数値を切り捨てます。ROUND が四捨五入するのに対し、TRUNC は端数を単純に落とします。
⚠️ 負の数での違いに注意してください。TRUNC は0 に近づける方向に落とすので、-1.5 は -1 になります。床関数の FLOOR は小さいほうへ落とすので -2 です。正の数では同じ結果になるため、負の値が来て初めて食い違いが表面化します。
消費税や手数料の計算では「切り捨て」が指定されることが多く、ROUND を使うと 1 円ずれます。要件の言葉をどの関数に対応させるかを、設計の段階で決めておいてください。
次に読む
根拠にした一次情報
- PostgreSQL 18 マニュアル: 数学関数と演算子(2026-09-02 確認)