【MySQL】FLOOR()関数を使って小数部分が整数(.00)のレコードだけを抽出する方法
DECIMAL型のカラムから「55.00」や「9.00」のように小数部分が0(整数値と等しい)レコードだけを取り出したい場合、FLOOR()関数を使うと簡単に実現できます。
FLOOR()関数による抽出の考え方
FLOOR()は引数の値を切り捨てて整数にする関数です。元の値とFLOOR()した値が一致していれば、その値は小数部分を持たない(小数点以下が0の)数値だと判断できます。たとえば、5.23、8.76、12.00、22.68といったレコードの中から、12.00のようなレコードのみを抽出するイメージです。
1. テーブルを作成する
まず、検証用のテーブルを作成します。
mysql> create table DemoTable
(
Value DECIMAL(4,2)
);
Query OK, 0 rows affected (0.53 sec)2. レコードを挿入する
INSERTコマンドでいくつかのデータを登録します。小数部分があるデータとないデータを混ぜて用意しています。
mysql> insert into DemoTable values(54.20); Query OK, 1 row affected (0.13 sec) mysql> insert into DemoTable values(55.0); Query OK, 1 row affected (0.24 sec) mysql> insert into DemoTable values(7.8); Query OK, 1 row affected (0.15 sec) mysql> insert into DemoTable values(9.0); Query OK, 1 row affected (0.15 sec) mysql> insert into DemoTable values(9.2); Query OK, 1 row affected (0.21 sec)
3. 登録されたデータを確認する
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from DemoTable;
実行結果は次のとおりです。
+-------+ | Value | +-------+ | 54.20 | | 55.00 | | 7.80 | | 9.00 | | 9.20 | +-------+ 5 rows in set (0.00 sec)
4. 小数部分が0のレコードを抽出する
以下が、値が整数と一致するレコードのみを取得するクエリです。「Value = FLOOR(Value)」という条件をWHERE句に指定します。
mysql> select *from DemoTable where Value=floor(Value);
実行すると、小数部分が0のレコードだけが出力されます。
+-------+ | Value | +-------+ | 55.00 | | 9.00 | +-------+ 2 rows in set (0.02 sec)
補足:CEILING()やTRUNCATE()でも代用可能
切り捨てを行うFLOOR()以外にも、TRUNCATE(Value, 0)(小数点以下を切り捨て)やCEILING()(切り上げ)と比較する方法でも同様の結果が得られます。負の値が含まれる可能性がある場合は、FLOOR()がより直感的に動作するためおすすめです。
-
MySQLで通貨形式を表示する方法:FORMAT()関数の使い方を解説
MySQLで通貨形式を設定する方法MySQLでは、FORMAT()関数を使うことで、数値データを通貨として見やすい形式に整形して表示できます。この記事では、実際にテーブルを作成し、金額データを「USD 90,948,484.00」のような通貨表記へ変換する手順を、サンプルコード付きでわかりやすく解説します。1. サンプルテーブルを作成するまず、金額を格納するためのテーブルを作成します。ここでは、小数点以下4桁まで保持できるDECIMAL型を使用します。mysql> create table DemoTable -> ( &nb
-
MySQLで月の範囲を指定してレコードを取得する方法
MySQLでは、YEAR()関数とMONTH()関数、さらにBETWEEN演算子を組み合わせることで、特定の月の範囲に該当するレコードを簡単に抽出できます。ここでは、前年の7月〜12月と当年の1月〜7月というように、年をまたいだ月の範囲でデータを取得する方法を解説します。 サンプルテーブルの作成 まず、テーブルを作成します。 mysql> create table DemoTable1795 ( Name varchar(20), DueDate date