MySQLのLIKE演算子で特定の文字から始まるレコードだけを検索・制限する方法
MySQLでは、LIKE演算子とワイルドカード%(任意の0文字以上の文字列)を組み合わせることで、カラムの値が特定の文字で始まるレコードだけを簡単に抽出できます。この記事では、実際にテーブルを作成し、前方一致検索を行う手順をわかりやすく解説します。
1. サンプルテーブルの作成
まず、以下のコマンドでテーブルを作成します。
mysql> create table DemoTable
(
FirstName varchar(40)
);
Query OK, 0 rows affected (0.52 sec)
2. レコードの挿入
INSERT文を使って、いくつかのレコードをテーブルに登録します。
mysql> insert into DemoTable values('John');
Query OK, 1 row affected (0.08 sec)
mysql> insert into DemoTable values('Adam');
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable values('David');
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable values('Mike');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('Sam');
Query OK, 1 row affected (0.09 sec)
3. 登録データの確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from DemoTable;
実行結果は以下のとおりです。
+-----------+ | FirstName | +-----------+ | John | | Adam | | David | | Mike | | Sam | +-----------+ 5 rows in set (0.00 sec)
4. LIKE演算子で先頭文字を指定して抽出する
特定の文字で始まるレコードに制限するには、パターンの末尾に%を付けて前方一致を表します。複数の先頭文字を許可したい場合は、OR演算子で条件をつなぎます。
mysql> select *from DemoTable where FirstName LIKE 'D%' or FirstName LIKE 'S%';
実行結果:
+-----------+ | FirstName | +-----------+ | David | | Sam | +-----------+ 2 rows in set (0.00 sec)
このように、DまたはSで始まる名前を持つレコードのみが抽出されました。'D%'のように記述することで、「Dで始まり、その後ろは何でもよい」という意味になり、中間一致(%D%)や後方一致(%D)とは異なる点に注意してください。
補足: REGEXPを使った別の書き方
正規表現を好みの場合は、REGEXPを使っても同じ結果が得られます。
mysql> select *from DemoTable where FirstName REGEXP '^[DS]';
^[DS]は「先頭がDまたはS」という意味になるため、条件が多い場合にはこちらの方がすっきりと書けることもあります。状況に応じて使い分けるとよいでしょう。
-
MySQLで特定のカラム名を持つテーブルを検索する方法
MySQLで特定のカラム名(列名)を持つテーブルを探したい場合は、システムビューである information_schema.columns を利用します。このビューにはデータベース内のすべてのテーブルとカラムの情報が格納されているため、条件を指定して検索するだけで、目的のカラムを持つテーブルを簡単に特定できます。 基本構文 カラム名からテーブル名を検索する際の基本的な構文は以下の通りです。 select distinct table_name from information_schema.columns where column_name like %yourSearchValue% a
-
MySQLで特定の日を加えてMM/YY形式をYYYY-MM-DDに変換する方法
MM/YYをYYYY-MM-DDに変換するには? MySQLでは、STR_TO_DATE()関数を使うことで、MM/YYのような短い日付形式を完全な日付形式(YYYY-MM-DD)に変換できます。ポイントは、CONCAT()関数で欠けている「日」の値を文字列に連結してから変換することです。基本的な構文は以下のとおりです。 select str_to_date(concat(yourDateValue/, yourColumnName), %d/%m/%y) as anyAliasName from yourTableName; 使用しているフォーマット指定子の意味は次のとおりです。 %d …