MySQLのCEILING・FLOOR・ROUND関数の違いを徹底解説!使い分けのポイント
MySQLにおけるCEILING()・FLOOR()・ROUND()関数の違いとは?
MySQLには数値を丸めるための関数が複数用意されていますが、それぞれ動作が異なります。本記事では、CEILING()、FLOOR()、ROUND()という3つの代表的な丸め関数の挙動と違いを、具体例を交えてわかりやすく解説します。
CEILING()関数:切り上げ
CEILING()関数は、引数Xより小さくならない(X以上の)最小の整数値を返します。つまり、正負に関わらず常に「切り上げ」を行います。
mysql> Select CEILING(3.46); +---------------+ | CEILING(3.46) | +---------------+ | 4 | +---------------+ 1 row in set (0.00 sec) mysql> Select CEILING(-6.43); +----------------+ | CEILING(-6.43) | +----------------+ | -6 | +----------------+ 1 row in set (0.02 sec)
上記の例のように、CEILING(3.46)は「4」、CEILING(-6.43)は「-6」を返します。負の数の場合もゼロから遠ざかる方向に丸められる点に注目してください。
FLOOR()関数:切り下げ
FLOOR()関数は、引数Xより大きくならない(X以下の)最大の整数値を返します。こちらは常に「切り下げ」を行います。
mysql> Select FLOOR(-6.43); +--------------+ | FLOOR(-6.43) | +--------------+ | -7 | +--------------+ 1 row in set (0.00 sec) mysql> Select FLOOR(3.46); +-------------+ | FLOOR(3.46) | +-------------+ | 3 | +-------------+ 1 row in set (0.00 sec)
FLOOR(-6.43)は「-7」、FLOOR(3.46)は「3」を返します。負の数の場合はゼロに近づく方向へ丸められることがわかります。
ROUND()関数:四捨五入
ROUND()関数は、引数Xを最も近い整数に四捨五入して返します。第2引数Dを指定すると、小数点以下D桁に丸めた結果を返します。なお、Dが負の値の場合は、小数点より右側のすべての桁が削除されます。
mysql> SELECT ROUND(5.693893); +---------------------------------------------------------+ | ROUND(5.693893) | +---------------------------------------------------------+ | 6 | +---------------------------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT ROUND(5.693893,2); +---------------------------------------------------------+ | ROUND(5.693893,2) | +---------------------------------------------------------+ | 5.69 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
ROUND(5.693893)は最も近い整数である「6」に、ROUND(5.693893,2)は小数第2位まで丸めた「5.69」にそれぞれ丸められます。
3つの関数の違いまとめ
これまでの定義と実行例から、3つの関数には以下のような違いがあることが確認できます。
- ROUND()関数:第2引数Dと数値そのもの(D桁目以降の数字が5以上かどうか)に応じて、切り上げにも切り下げにもなります(一般的な四捨五入)。
- FLOOR()関数:ゼロに向かって、常に切り下げを行います。
- CEILING()関数:ゼロから遠ざかる方向に、常に切り上げを行います。
実際に同じ値に対して3つの関数を実行し、結果を比較してみましょう。
mysql> Select ROUND(1.415,2),FLOOR(1.415),CEILING(1.415); +----------------+--------------+----------------+ | ROUND(1.415,2) | FLOOR(1.415) | CEILING(1.415) | +----------------+--------------+----------------+ | 1.42 | 1 | 2 | +----------------+--------------+----------------+ 1 row in set (0.00 sec)
このように、同じ入力値「1.415」でも、使用する関数によって結果が「1.42」「1」「2」と大きく異なります。金額計算や端数処理など、ビジネスロジックにおいて丸め方の指定が重要な場面では、これらの関数の特性を正しく理解した上で適切に使い分けることが大切です。
-
MySQLのCONCAT関数で異なる列の文字列と追加の文字列を連結する方法
MySQLではCONCAT関数を使用することで、異なる列の文字列同士を連結したり、任意の追加文字列を組み合わせたりすることができます。ここでは、FirstName(名)とLastName(姓)の2つの列を持つテーブルを例に、先頭に「Hello」という文字列を付けて連結する方法を解説します。1. テーブルの作成まず、サンプル用のテーブルを作成します。mysql> create table DemoTable ( FirstName varchar(100), LastName varchar(100) ); Query OK, 0 rows affected (0.76 s
-
MySQLのCASE文で同じ列から条件別に値を取り出し、別々の列に表示する方法
MySQLのCASE文で同じ列から条件別に値を取り出す方法 MySQLである列(カラム)の値を複数の条件で判定し、それぞれの結果を別々の列として表示したい場合は、CASE文を使用します。CASE文を組み合わせることで、1つの列から条件に応じた異なる値を柔軟に取り出せます。 まず、サンプル用のテーブルを作成しましょう。 mysql> create table DemoTable ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, Name varchar