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』テーブルを例に説明します。
商品の単価に税率を掛けて、四捨五入・切り上げ・切り捨てを比較します。
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』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。