MySQLで特定の文字列で終わる行を検索して更新する方法(LIKE演算子の使い方)
MySQLで、列の値が特定の文字列(サブストリング)で終わっている行を検索し、新しい値に更新したい場合は、LIKE演算子を使用します。ワイルドカード「%」を組み合わせることで、「〜で終わる」という条件を簡単に指定できます。
基本構文
列の値が特定の文字列で終わる行を検索して更新する場合の基本的な構文は以下のとおりです。
UPDATE テーブル名 SET 列名='新しい値' WHERE 列名 LIKE '%.検索する文字列';
ポイントは、検索文字列の前に「%」を付けることです。「%」は任意の0文字以上の文字列にマッチするため、「%.docx」のように指定すると「.docxで終わるすべての値」が対象になります。
サンプルテーブルの作成
それでは、実際に動作を確認してみましょう。まず、テスト用のテーブルを作成します。
mysql> create table RowEndsWithSpecificString -> ( -> Id int NOT NULL AUTO_INCREMENT, -> FileName varchar(30), -> PRIMARY KEY(Id) -> ); Query OK, 0 rows affected (1.50 sec)
ファイル名を格納する「FileName」列を持つテーブルを作成しました。
テストデータの挿入
次に、INSERT文を使っていくつかのレコードを挿入します。拡張子の異なるファイル名を登録してみましょう。
mysql> insert into RowEndsWithSpecificString(FileName) values('MergeSort.c');
Query OK, 1 row affected (0.11 sec)
mysql> insert into RowEndsWithSpecificString(FileName) values('BubbleSortIntroduction.pdf');
Query OK, 1 row affected (0.25 sec)
mysql> insert into RowEndsWithSpecificString(FileName) values('AllMySQLQuery.docx');
Query OK, 1 row affected (0.18 sec)
mysql> insert into RowEndsWithSpecificString(FileName) values('JavaCollections.pdf');
Query OK, 1 row affected (0.16 sec)
mysql> insert into RowEndsWithSpecificString(FileName) values('JavaServlet.pdf');
Query OK, 1 row affected (0.18 sec)登録データの確認
SELECT文ですべてのレコードを表示して確認します。
mysql> select *from RowEndsWithSpecificString;
実行結果は以下のとおりです。
+----+----------------------------+ | Id | FileName | +----+----------------------------+ | 1 | MergeSort.c | | 2 | BubbleSortIntroduction.pdf | | 3 | AllMySQLQuery.docx | | 4 | JavaCollections.pdf | | 5 | JavaServlet.pdf | +----+----------------------------+ 5 rows in set (0.00 sec)
この中で「.docx」で終わるのはId=3の「AllMySQLQuery.docx」だけであることがわかります。
LIKE演算子で検索・更新を実行
ここで、列の値が「.docx」で終わる行を検索し、その値を「IntroductionToCoreJava.pdf」に更新するクエリを実行します。
mysql> update RowEndsWithSpecificString -> set FileName='IntroductionToCoreJava.pdf' -> where FileName LIKE '%.docx'; Query OK, 1 row affected (0.14 sec) Rows matched: 1 Changed: 1 Warnings: 0
「Rows matched: 1 Changed: 1」と表示されているように、条件に一致した1行だけが更新されました。
更新後の確認
もう一度SELECT文を実行して、テーブルの内容を確認しましょう。
mysql> select *from RowEndsWithSpecificString;
実行結果は以下のとおりです。
+----+----------------------------+ | Id | FileName | +----+----------------------------+ | 1 | MergeSort.c | | 2 | BubbleSortIntroduction.pdf | | 3 | IntroductionToCoreJava.pdf | | 4 | JavaCollections.pdf | | 5 | JavaServlet.pdf | +----+----------------------------+ 5 rows in set (0.00 sec)
Id=3のレコードが「AllMySQLQuery.docx」から「IntroductionToCoreJava.pdf」に正しく更新されていることが確認できます。
まとめ
- 列の値が特定の文字列で終わる行を検索するには「LIKE '文字列%'」ではなく「LIKE '%文字列'」のように、先頭に「%」を付けます。
- 逆に、特定の文字列で始まる行を検索したい場合は「LIKE '文字列%'」とします。
- 部分一致で検索したい場合は「LIKE '%文字列%'」のように両側に「%」を付けます。
LIKE演算子とワイルドカード「%」を組み合わせれば、柔軟なパターンマッチングによる検索・更新が可能になります。大量データを扱う場合は先頭に「%」を付けた検索はインデックスが利用されにくい点にも注意しておきましょう。
-
MySQLで特定のカラム名を持つテーブルを検索する方法
MySQLで特定のカラム名(列名)を持つテーブルを探したい場合は、システムビューである information_schema.columns を利用します。このビューにはデータベース内のすべてのテーブルとカラムの情報が格納されているため、条件を指定して検索するだけで、目的のカラムを持つテーブルを簡単に特定できます。 基本構文 カラム名からテーブル名を検索する際の基本的な構文は以下の通りです。 select distinct table_name from information_schema.columns where column_name like %yourSearchValue% a
-
MySQLでパイプ区切り(|)の列から一致する行を検索する方法
MySQLでパイプ区切り列の一致検索には正規表現を使うMySQLでパイプ区切り(|)の値が格納された列から特定の値に一致する行を検索したい場合は、REGEXP演算子による正規表現マッチングを利用するのが効果的です。ここでは、実際にテーブルを作成し、データを挿入して検索を実行するまでの手順を具体的に解説します。1. テーブルを作成するまず、検索対象となるサンプルテーブルを作成します。mysql> create table DemoTable -> ( -> Value varchar(60) -> );Query OK, 0 rows affected