$ man ceil-floor
CEIL / FLOOR
数値関数天井(切り上げ)と床(切り捨て)。負の数では TRUNC と結果が違う。
呼び出しの形
CEIL(数値) CEILING(数値) FLOOR(数値)
つまずきやすいところ
負の数で
TRUNCと結果が違います。FLOORは小さいほう、TRUNCは 0 に近いほうです。整数どうしの割り算は先に切り捨てられます。
CEIL(45 / 20)は 2 です。小数にしてから割ってください。戻り値の型は引数の型に従います。
numericを渡せばnumericが返るので、整数として扱いたいときは型変換してください。
実行例
結果は実際に流したものです。同じ SQL を 自由に打てる画面 で試すと、同じ結果になります。
SELECT CEIL(1.2) AS c12, CEIL(-1.2) AS c_m12, FLOOR(1.8) AS f18, FLOOR(-1.8) AS f_m18, TRUNC(-1.8) AS t_m18
| c12 | c_m12 | f18 | f_m18 | t_m18 |
|---|---|---|---|---|
| 2 | -1 | 1 | -2 | -1 |
1 行
負の数では FLOOR と TRUNC の結果が違います。
SELECT juchu_id, gyo_no, suryo, CEIL(suryo / 20.0) AS hako_su, suryo / 20 AS seisu_warizan FROM juchu_meisai ORDER BY juchu_id, gyo_no
| juchu_id | gyo_no | suryo | hako_su | seisu_warizan |
|---|---|---|---|---|
| 1001 | 1 | 20 | 1 | 1 |
| 1001 | 2 | 30 | 2 | 1 |
| 1002 | 1 | 2 | 1 | 0 |
| 1002 | 2 | 1 | 1 | 0 |
| 1003 | 1 | 4 | 1 | 0 |
| 1003 | 2 | 2 | 1 | 0 |
| 1004 | 1 | 5 | 1 | 0 |
| 1005 | 1 | 10 | 1 | 0 |
17 行(うち 8 行を表示)
整数どうしで割ると先に切り捨てられるので、20.0 と小数で割っています。
説明
CEIL は大きいほうの整数へ、FLOOR は小さいほうの整数へ寄せます。CEILING は CEIL の別名で、意味は同じです。
⚠️ 負の数で TRUNC と食い違います。FLOOR(-1.5) は -2(小さいほう)ですが、TRUNC(-1.5) は -1(0 に近いほう)です。正の数では同じ結果になるため、負の値が来て初めて表面化します。
「何箱必要か」のような計算では CEIL が要ります。20 個入りの箱に 45 個なら CEIL(45 / 20.0) = 3 箱です。⚠️ このとき 45 / 20 と整数どうしで割ると先に 2 になってしまうので、どちらかを小数にしてから割ってください。
次に読む
根拠にした一次情報
- PostgreSQL 18 マニュアル: 数学関数と演算子(2026-09-02 確認)