MySQLでHAVING LENGTH(field)を実装する方法をわかりやすく解説
MySQLでは、GROUP BY句とLENGTH()関数、そしてHAVING句を組み合わせることで、フィールドの文字数を条件としてレコードを絞り込むことができます。本記事では、「HAVING LENGTH(field)」を実装する具体的な手順を、サンプルテーブルの作成から実行結果まで順番に解説します。
1. サンプルテーブルを作成する
まず、CREATE TABLE文でテーブルを作成します。
mysql> create table DemoTable ( Title text ); Query OK, 0 rows affected (0.39 sec)
2. テーブルにレコードを挿入する
続いて、INSERTコマンドを使用してテーブルにデータを追加します。
mysql> insert into DemoTable values('Introduction to MySQL');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('Introduction to Java');
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable values('Introduction to SQL');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values('Introduction to Python');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values('Introduction to SQL');
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable values('Introduction to Java');
Query OK, 1 row affected (0.13 sec)
3. テーブルの内容を確認する
SELECT文を実行して、登録されたすべてのレコードを表示してみましょう。
mysql> select *from DemoTable;
実行結果は以下の通りです。
+------------------------+ | Title | +------------------------+ | Introduction to MySQL | | Introduction to Java | | Introduction to SQL | | Introduction to Python | | Introduction to SQL | | Introduction to Java | +------------------------+ 6 rows in set (0.00 sec)
4. HAVING LENGTH(field)を実装したクエリ
ここが本題です。以下が、MySQLでHAVING LENGTH(field)を実装するクエリの例です。
mysql> select *from DemoTable group by length(Title) having length(Title) < 21;
実行結果:
+----------------------+ | Title | +----------------------+ | Introduction to SQL | | Introduction to Java | +----------------------+ 2 rows in set (0.00 sec)
クエリのポイント
このクエリでは、まず「group by length(Title)」によってTitleカラムの文字数ごとにレコードがグループ化されます。その後、HAVING句で「length(Title) < 21」つまり文字数が21未満のグループのみを抽出しています。その結果、「Introduction to SQL」(20文字)と「Introduction to Java」(20文字)だけが表示されました。
まとめ
WHERE句では集計後のグループに対して条件を指定できないため、グループ化後の結果をフィルタリングしたい場合はHAVING句を使います。LENGTH()関数をGROUP BYと組み合わせれば、文字数を基準にした柔軟なデータ抽出が可能になります。「特定の文字数以下のレコードだけを取得したい」といったケースでぜひ活用してみてください。
-
MySQLでchar型カラムをdatetime型に変換する方法をわかりやすく解説
MySQLでは、char型として保存された日付文字列をdatetime形式に変換したいケースがあります。本記事では、REPLACE関数とSTR_TO_DATE関数を組み合わせて、「12/31/2017 10:50」のような米国式の日付文字列を「2017-12-31 10:50:00」というdatetime形式へ変換する手順を、実際のSQLと実行結果付きで解説します。サンプルテーブルの作成まず、テーブルを作成します。ここでは配送日(ShippingDate)をあえてchar型として宣言しています。mysql> create table DemoTable1472 &n
-
MySQLでDOUBLE型の桁数(長さ)を実装・設定する方法
MySQLでDOUBLE型のカラムを作成する場合、以下のような構文を使用します。create table yourTableName ( yourColumnName double(5,2) unsigned );DOUBLE型の構文についてdouble(5,2) の「5」は整数部と小数部を合わせた全体の桁数、「2」は小数点以下の桁数を表します。つまり、この設定では最大で 999.99 までの値を格納できます。さらに、unsigned を指定すると負の値が除外され、正の数値のみを扱うカラムになります。テーブルの作成まず、実際にテーブルを作成してみましょう。mysql> create ta