Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

  1. トップページ
  2. SQL辞典
  3. ROUND / CEIL / FLOOR

ROUND / CEIL / FLOOR

数値を指定した桁数に丸める関数です。四捨五入・切り上げ・切り捨てのそれぞれに対応する関数があります。

構文
-- ROUND: 指定した桁数で四捨五入します。
ROUND(数値, 桁数)

-- CEIL / CEILING: 数値以上の最小の整数(切り上げ)を返します。
CEIL(数値)
CEILING(数値)

-- FLOOR: 数値以下の最大の整数(切り捨て)を返します。
FLOOR(数値)

-- TRUNCATE: 指定した桁数で小数部を切り捨てます(MySQLなど)。
TRUNCATE(数値, 桁数)
構文一覧
関数概要
ROUND(n, d)dで指定した小数点以下の桁数で四捨五入します。dを省略すると小数点以下を四捨五入して整数を返します。dに負の値を指定すると整数部を丸めます。
CEIL(n) / CEILING(n)nを超えない最小の整数を返します(切り上げ)。負の数は0方向に切り上げられます。
FLOOR(n)n以下の最大の整数を返します(切り捨て)。負の数は0から遠ざかる方向に切り捨てられます。
TRUNCATE(n, d)dで指定した桁数で小数部を切り捨てます。ROUNDとは異なり丸め処理なしに数値を短くします(MySQL・SQL Serverなど)。
サンプルコード
-- 商品の単価に税率を掛けて、四捨五入・切り上げ・切り捨てを比較します。
SELECT
    商品名,
    単価,
    ROUND(単価 * 1.1, 0)    AS 税込_四捨五入,
    CEIL(単価 * 1.1)        AS 税込_切り上げ,
    FLOOR(単価 * 1.1)       AS 税込_切り捨て,
    TRUNCATE(単価 * 1.1, 0) AS 税込_TRUNCATE
FROM 商品;

-- 月次売上を千円単位で表示します(ROUND で下3桁を丸める)。
SELECT
    売上月,
    SUM(売上金額) AS 合計,
    ROUND(SUM(売上金額), -3) AS 千円単位
FROM 月別売上
GROUP BY 売上月
ORDER BY 売上月;

-- 平均単価を小数点第1位まで求めます。
SELECT
    カテゴリ名,
    ROUND(AVG(単価), 1) AS 平均単価
FROM 商品
GROUP BY カテゴリ名;
実行結果
-- 税込価格の比較(単価 1980 の場合、1.1倍 = 2178.0)。
商品名     | 単価  | 四捨五入 | 切り上げ | 切り捨て | TRUNCATE
-----------+-------+----------+----------+----------+---------
マグカップ | 1980  | 2178     | 2178     | 2178     | 2178
ノート     | 1500  | 1650     | 1650     | 1650     | 1650
ボールペン | 980   | 1078     | 1078     | 1078     | 1078

-- 千円単位の月次売上。
売上月   | 合計      | 千円単位
---------+-----------+---------
2024-01  | 1234567   | 1235000
2024-02  | 987654    | 988000
データベース別の書き方

『ROUND』『CEIL』(または『CEILING』)・『FLOOR』は MySQL・PostgreSQL・Oracle・SQL Server・SQLite で共通して使用できます。

-- 全データベース共通の構文です。
SELECT ROUND(単価 * 1.1, 0) AS 税込_四捨五入 FROM 商品;
SELECT CEIL(単価 * 1.1) AS 税込_切り上げ FROM 商品;
SELECT FLOOR(単価 * 1.1) AS 税込_切り捨て FROM 商品;

Oracle では『CEIL』のみ使用でき、『CEILING』は使えません。他のデータベースではどちらも使用できます。

『TRUNCATE』は MySQL 独自の関数です。PostgreSQL・Oracle では『TRUNC』を使います。SQL Server では『ROUND』の第3引数に 1 を指定すると切り捨てになります。

-- MySQL: TRUNCATE を使います。
SELECT TRUNCATE(単価 * 1.1, 0) AS 税込_切り捨て FROM 商品;

-- PostgreSQL・Oracle: TRUNC を使います。
SELECT TRUNC(単価 * 1.1, 0) AS 税込_切り捨て FROM 商品;

-- SQL Server: ROUND の第3引数に 1 を指定します。
SELECT ROUND(単価 * 1.1, 0, 1) AS 税込_切り捨て FROM 商品;
概要

『ROUND』の第2引数には負の値も指定できます。-1 で一の位を丸め、-3 で千の位を丸めるといった使い方ができます。

『CEIL』と『FLOOR』の負の数の扱いに注意してください。CEIL(-1.5) は -1(0方向)、FLOOR(-1.5) は -2(0から遠ざかる方向)を返します。税計算では法律・業務ルールに従って切り捨て・切り上げ・四捨五入のいずれかを選ぶ必要があります。日本の消費税では端数は切り捨てが一般的です。

絶対値や剰余などの数値演算は『ABS / MOD / POWER』を参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。