MySQLで小数点以下2桁を超える行を抽出する方法
MySQLで小数点以下2桁を超える値を持つ行を抽出したい場合は、SUBSTR()関数を活用します。まずはサンプル用のテーブルを作成しましょう。
mysql> create table selectRows2DecimalPlacesDemo -> ( -> Amount varchar(100) -> ); Query OK, 0 rows affected (0.73 sec)
次に、INSERTコマンドを使ってテーブルにレコードを挿入します。
mysql> insert into selectRows2DecimalPlacesDemo values('234.5678');
Query OK, 1 row affected (0.17 sec)
mysql> insert into selectRows2DecimalPlacesDemo values('19.50');
Query OK, 1 row affected (0.19 sec)
mysql> insert into selectRows2DecimalPlacesDemo values('23.456');
Query OK, 1 row affected (0.17 sec)
mysql> insert into selectRows2DecimalPlacesDemo values('12.123');
Query OK, 1 row affected (0.14 sec)SELECT文でテーブル内のすべてのレコードを確認してみましょう。
mysql> select * from selectRows2DecimalPlacesDemo;
実行すると、以下のような結果が得られます。
+----------+ | Amount | +----------+ | 234.5678 | | 19.50 | | 23.456 | | 12.123 | +----------+ 4 rows in set (0.00 sec)
小数点以下2桁を超える行を抽出するクエリ
それでは、小数点以下が2桁より多い行だけを取り出すクエリを見てみましょう。
mysql> select *from selectRows2DecimalPlacesDemo WHERE LENGTH(SUBSTR(Amount,INSTR(Amount,"."))) >3;
実行結果は以下のとおりです。
+----------+ | Amount | +----------+ | 234.5678 | | 23.456 | | 12.123 | +----------+ 3 rows in set (0.00 sec)
クエリの仕組み
このクエリは、3つの文字列関数を組み合わせることで実現しています。
- INSTR(Amount, "."):文字列内に小数点「.」が最初に現れる位置を返します。
- SUBSTR(Amount, 位置):指定した位置(小数点の位置)から末尾までの文字列を抽出します。抽出結果には小数点自体も含まれます。
- LENGTH(...):抽出した文字列の長さを返します。小数点1文字+小数桁数となるため、長さが3より大きければ「小数点以下が3桁以上(つまり2桁超)」であることを意味します。
なお、この方法はAmountカラムがvarchar型(文字列型)であることを前提としています。数値型のカラムに対して同様の処理を行いたい場合は、CAST()やCONVERT()で文字列に変換してから適用するとよいでしょう。
-
MySQLでテーブルの最後の10件のレコードを取得する方法
MySQLでテーブルの末尾にある10行(最新の10件)を取得したい場合は、SELECT文とLIMIT句を組み合わせたサブクエリを利用します。この記事では、実際にテーブルを作成し、データを挿入しながら、最後の10件を取得するクエリの手順を具体的に解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成します。 mysql> create table Last10RecordsDemo -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected
-
MySQLで重複している値(複数回出現するデータ)を抽出する方法
テーブル内に2回以上出現する値(重複データ)を抽出したい場合、「GROUP BY」句と「HAVING」句を「COUNT(*)」関数と組み合わせて使用します。WHERE句は集計前の行に対して条件を適用するため、集計後の結果を絞り込むにはHAVING句が必要になる点がポイントです。 1. サンプルテーブルを作成する まず、検証用のテーブルを作成しましょう。 mysql> create table DemoTable -> ( -> Value int &nbs