言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

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

ROUND / CEIL / FLOOR

対応: SQL-92(1992)

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

構文

『ROUND』: 指定した桁数で四捨五入します。

ROUND(num, digits)

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

CEIL(num)
CEILING(num)

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

FLOOR(num)

『TRUNCATE』: 指定した桁数で小数部を切り捨てます(MySQLなど)。

TRUNCATE(num, digits)

構文一覧

関数概要
ROUND(n, d)dで指定した小数点以下の桁数で四捨五入します。dを省略すると小数点以下を四捨五入して整数を返します。dに負の値を指定すると整数部を丸めます。
CEIL(n) / CEILING(n)nを超えない最小の整数を返します(切り上げ)。負の数は0方向に切り上げられます。
FLOOR(n)n以下の最大の整数を返します(切り捨て)。負の数は0から遠ざかる方向に切り捨てられます。
TRUNCATE(n, d)dで指定した桁数で小数部を切り捨てます。ROUNDとは異なり丸め処理なしに数値を短くします(MySQL)。

サンプルコード

以下の『products』テーブルを例に説明します。

products product_name price マグカップ 1980 ノート 1500 ボールペン 980 3 rows in set

商品の単価に税率を掛けて、四捨五入・切り上げ・切り捨てを比較します。

sample_round_ceil_floor.sql
SELECT
    product_name,
    price,
    ROUND(price * 1.1, 0)    AS tax_round,
    CEIL(price * 1.1)        AS tax_ceil,
    FLOOR(price * 1.1)       AS tax_floor,
    TRUNCATE(price * 1.1, 0) AS tax_truncate
FROM products;
+--------------+-------+-----------+----------+-----------+--------------+
| product_name | price | tax_round | tax_ceil | tax_floor | tax_truncate |
+--------------+-------+-----------+----------+-----------+--------------+
| マグカップ   |  1980 |      2178 |     2178 |      2178 |         2178 |
| ノート       |  1500 |      1650 |     1650 |      1650 |         1650 |
| ボールペン   |   980 |      1078 |     1078 |      1078 |         1078 |
+--------------+-------+-----------+----------+-----------+--------------+
3 rows in set

全商品の合計価格を千円単位で丸めます(ROUND で下3桁を丸める)。

sample_round_ceil_floor.sql
SELECT
    SUM(price) AS total_price,
    ROUND(SUM(price), -3) AS rounded_thousands
FROM products;
+-------------+-------------------+
| total_price | rounded_thousands |
+-------------+-------------------+
|        4460 |              4000 |
+-------------+-------------------+
1 row in set

平均価格を小数点第1位まで求めます。

sample_round_ceil_floor.sql
SELECT
    ROUND(AVG(price), 1) AS avg_price
FROM products;
+-----------+
| avg_price |
+-----------+
|    1486.7 |
+-----------+
1 row in set

データベース別の書き方

MySQL / MariaDB

『ROUND』『CEIL』(または『CEILING』)・『FLOOR』・『TRUNCATE』がすべて使用できます。

SELECT ROUND(price * 1.1, 0) AS tax_round FROM products;
SELECT CEIL(price * 1.1) AS tax_ceil FROM products;
SELECT FLOOR(price * 1.1) AS tax_floor FROM products;
SELECT TRUNCATE(price * 1.1, 0) AS tax_truncate FROM products;

PostgreSQL

『ROUND』『CEIL』『FLOOR』が使用できます。切り捨てには『TRUNCATE』ではなく『TRUNC』を使います。Oracle では『CEIL』のみ使用でき、『CEILING』は使えません。

SELECT ROUND(price * 1.1, 0) AS tax_round FROM products;
SELECT CEIL(price * 1.1) AS tax_ceil FROM products;
SELECT FLOOR(price * 1.1) AS tax_floor FROM products;
SELECT TRUNC(price * 1.1, 0) AS tax_truncate FROM products;

SQLite

SQLite では『ROUND』『CEIL』(または『CEILING』)・『FLOOR』が使用できます。『TRUNCATE』は使用できないため、『CAST』で整数に変換して代用します。

SELECT ROUND(price * 1.1, 0) AS tax_round FROM products;
SELECT CEIL(price * 1.1) AS tax_ceil FROM products;
SELECT FLOOR(price * 1.1) AS tax_floor FROM products;
SELECT CAST(price * 1.1 AS INTEGER) AS tax_truncate FROM products;

概要

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

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

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

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