MySQLデータベースで特定の文字列だけを検索・置換する方法をわかりやすく解説
MySQLデータベース内で文字列を置き換えるには、replace()関数を使用します。この関数とUPDATE文を組み合わせることで、特定の条件に一致するレコードのみを効率的に検索・置換できます。
replace()関数を使った置換の基本構文
文字列の検索と置換を行う基本構文は以下のとおりです。
UPDATE テーブル名
SET カラム名 = replace(カラム名, '既存の値', '新しい値')
WHERE 条件;
WHERE句で条件を指定することで、テーブル全体ではなく、該当するレコードだけを対象に置換処理を実行できるのがポイントです。
サンプルテーブルの作成
それでは、実際に構文を確認するためのテーブルを作成しましょう。以下のクエリを実行します。
mysql> create table findAndReplaceDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentFirstName varchar(20)
-> );
Query OK, 0 rows affected (0.49 sec)
学生の名前を格納する「StudentFirstName」カラムを持つテーブルが作成できました。
テストデータの挿入
次に、INSERTコマンドを使ってテーブルにレコードを挿入します。
mysql> insert into findAndReplaceDemo(StudentFirstName) values('Carol');
Query OK, 1 row affected (0.15 sec)
mysql> insert into findAndReplaceDemo(StudentFirstName) values('David');
Query OK, 1 row affected (0.15 sec)
mysql> insert into findAndReplaceDemo(StudentFirstName) values('Bob');
Query OK, 1 row affected (0.10 sec)
mysql> insert into findAndReplaceDemo(StudentFirstName) values('Sam');
Query OK, 1 row affected (0.11 sec)
mysql> insert into findAndReplaceDemo(StudentFirstName) values('Mike');
Query OK, 1 row affected (0.13 sec)
mysql> insert into findAndReplaceDemo(StudentFirstName) values('Maxwell');
Query OK, 1 row affected (0.17 sec)挿入したデータの確認
SELECT文ですべてのレコードを表示して確認します。
mysql> select *from findAndReplaceDemo;
実行結果は以下のとおりです。
+----+------------------+
| Id | StudentFirstName |
+----+------------------+
| 1 | Carol |
| 2 | David |
| 3 | Bob |
| 4 | Sam |
| 5 | Mike |
| 6 | Maxwell |
+----+------------------+
6 rows in set (0.00 sec)
特定の文字列のみを置換する実行例
ここからが本題です。「Maxwell」という値を持つレコードのみを対象に、「Maxwell」を「Chris」へ置き換えてみましょう。WHERE句で条件を指定するのが重要なポイントです。
mysql> update findAndReplaceDemo
-> set StudentFirstName=replace(StudentFirstName,'Maxwell','Chris')
-> where StudentFirstName='Maxwell';
Query OK, 1 row affected (0.16 sec)
Rows matched: 1 Changed: 1 Warnings: 0
「Rows matched: 1 Changed: 1」と表示されており、1件のレコードだけが更新されたことがわかります。
置換後の結果確認
もう一度SELECT文を実行して、テーブルの内容を確認してみましょう。
mysql> select *from findAndReplaceDemo;
実行結果は以下のとおりです。「Maxwell」が「Chris」に正しく変更されています。
+----+------------------+
| Id | StudentFirstName |
+----+------------------+
| 1 | Carol |
| 2 | David |
| 3 | Bob |
| 4 | Sam |
| 5 | Mike |
| 6 | Chris |
+----+------------------+
6 rows in set (0.00 sec)
まとめ
MySQLで文字列の検索・置換を行う場合は、replace()関数とUPDATE文を組み合わせます。WHERE句を指定しないとテーブル内のすべてのレコードが置換対象になるため、特定の文字列だけを安全に置き換えたい場合は、必ず条件を設定するようにしましょう。また、本番環境で一括置換を行う前には、必ずバックアップを取得しておくことをおすすめします。
-
MySQLで特定の値を検索してNULLに置き換える方法をわかりやすく解説
MySQLで値を検索してNULLに置き換える基本構文 MySQLでテーブル内の特定の値を見つけてNULLに置き換えたい場合は、UPDATE文とSET句を使って yourColumnName = NULL のように指定します。基本的な構文は以下の通りです。 update yourTableName set yourColumnName=NULL where yourColumnName=yourValue; WHERE句で対象となる値を指定することで、該当する行だけをNULLに更新できるのがポイントです。 サンプルテーブルの作成 まずは動作確認用のテーブルを作成しましょう。 mysql>
-
MySQLで文字列の最初に出現する語のみを置換する方法
REGEXP_REPLACE()で最初の出現箇所だけを置換する文字列内に同じ単語が複数回登場する場合、そのうち最初の1回だけを別の単語に置き換えたいことがあります。MySQLではREGEXP_REPLACE()関数を使うことで、この要件を簡単に実現できます。なお、この関数はMySQL 8.0以降で利用可能です。例として、次のような文字列を考えてみましょう。This is my first MySQL query. This is the first tutorial. I am learning for the first time.この文字列には「first」という単語が3回出現しますが、最