SQLで数値や日付を扱っていると、「小数点以下を切り捨てたい」「必ず切り上げたい」といった場面は頻繁にあります。
そのような時に使う代表的な関数が TRUNC と CEIL です。
本記事では、それぞれの役割・違い・具体的な使用例を、数値と日付の両方でわかりやすく解説します。
TRUNC とは(切り捨て)
TRUNC は、指定した桁より下を切り捨てる関数です。
四捨五入は行わず、単純に「不要な部分を削る」動作になります。
数値を切り捨てる
桁数を指定することで、小数点以下の任意の位置まで残すことも可能です。
|
1 2 3 |
SELECT TRUNC(123.456, 1) FROM dual; -- 結果:123.4<code class="whitespace-pre! language-sql"> |
| 指定値 | 意味 |
|---|---|
| 省略 | 小数点以下をすべて切り捨て |
| 1 | 小数第1位まで残す |
| 2 | 小数第2位まで残す |
日付を切り捨てる(TRUNC(日付))
TRUNC は日付型にも使用できます。
この場合、指定した単位より下の情報を切り捨てます。
|
1 2 |
SELECT TRUNC(SYSDATE) FROM dual;<code class="whitespace-pre! language-sql"> |
→ 時刻部分(時・分・秒)がすべて 00:00:00 になります。
単位を指定する例:
|
1 2 |
SELECT TRUNC(SYSDATE, 'MM') FROM dual;<code class="whitespace-pre! language-sql"> |
→ 月初の日付に切り捨て
|
1 2 |
SELECT TRUNC(SYSDATE, 'YYYY') FROM dual;<code class="whitespace-pre! language-sql"> |
→ 年初(1月1日)に切り捨て
CEIL とは(切り上げ)
CEIL は、指定した値以上の最小の整数を返す関数です。
小数点以下が少しでもあれば、必ず切り上げられます。
|
1 2 3 |
SELECT CEIL(123.001) FROM dual; -- 結果:124<code class="whitespace-pre! language-sql"> |
ポイントは以下の通りです。
-
小数点以下が 0より大きい → 切り上げ
-
すでに整数 → そのまま返却
TRUNC と CEIL の違いまとめ
| 関数 | 動作 | 主な用途 |
|---|---|---|
| TRUNC | 切り捨て | 金額計算、日付の正規化 |
| CEIL | 切り上げ | 件数計算、ページ数算出 |
よくある使用シーン
金額計算で端数を切り捨てたい
|
1 2 |
SELECT TRUNC(price * 1.1) FROM items;<code class="whitespace-pre! language-sql"> |
ページ数を切り上げたい(1ページ10件)
|
1 2 |
SELECT CEIL(total_count / 10) FROM dual;<code class="whitespace-pre! language-sql"> |
日付の比較を簡単にしたい
|
1 2 |
WHERE TRUNC(created_at) = TRUNC(SYSDATE)<code class="whitespace-pre! language-sql"> |
時刻の影響を排除したい場合に非常によく使われます。
注意点
-
TRUNC は四捨五入ではない
-
四捨五入したい場合は
ROUNDを使用する
-
-
CEIL は日付には使えない
-
日付の切り上げは
TRUNC + INTERVALなどで対応する
-
DBMS別|切り捨て・切り上げ関数の比較表
数値の切り捨て・切り上げ
| DBMS | 切り捨て | 切り上げ | 備考 |
|---|---|---|---|
| Oracle | TRUNC(n) | CEIL(n) | TRUNCは桁指定・日付対応あり |
| MySQL | TRUNCATE(n, d) | CEILING(n) / CEIL(n) | TRUNCATEは小数桁指定必須 |
| PostgreSQL | TRUNC(n) | CEILING(n) / CEIL(n) | 標準SQL寄り |
| SQL Server | FLOOR(n) | CEILING(n) | TRUNCは存在しない |
| SQLite | CAST(n AS INT) | CEILING(n) | CASTは負数に注意 |
| MariaDB | TRUNCATE(n, d) | CEILING(n) | MySQL互換 |
小数点以下の挙動例(123.456 の場合)
| DBMS | 切り捨て結果 | 切り上げ結果 |
|---|---|---|
| Oracle | TRUNC(123.456) → 123 | CEIL(123.456) → 124 |
| MySQL | TRUNCATE(123.456, 0) → 123 | CEILING(123.456) → 124 |
| PostgreSQL | TRUNC(123.456) → 123 | CEIL(123.456) → 124 |
| SQL Server | FLOOR(123.456) → 123 | CEILING(123.456) → 124 |
まとめ
-
切り捨てたい → TRUNC
-
必ず切り上げたい → CEIL
-
数値だけでなく、日付処理にも TRUNC は頻出
-
集計・比較・表示調整で覚えておくと非常に便利
SQLの可読性と正確性を上げるためにも、用途に応じて正しく使い分けましょう。


