MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLで文字列を置換する方法:REPLACE()関数の使い方を実例付きで解説

MySQLにはstr_replace関数はない?REPLACE()関数で文字列置換を実現しよう

PHPなどでおなじみのstr_replaceに相当する機能は、MySQLではREPLACE()関数として提供されています。この関数を使えば、カラム内の特定の文字列を別の文字列へ簡単に置き換えることができます。

ここでは、実際にテーブルを作成し、サンプルデータを使いながらREPLACE()関数の基本的な使い方を順番に見ていきましょう。

1. サンプルテーブルを作成する

まず、動作確認用のテーブルをCREATE TABLE文で作成します。

mysql> create table StringReplaceDemo
   -> (
   -> Id int,
   -> URL varchar(200)
   -> );
Query OK, 0 rows affected (0.38 sec)

2. テストデータを挿入する

続いて、INSERT文でURLデータを数件登録します。

mysql> insert into StringReplaceDemo values(1001,'https://www.google.co.in');
Query OK, 1 row affected (0.09 sec)

mysql> insert into StringReplaceDemo values(1002,'https://www.facebook.com');
Query OK, 1 row affected (0.11 sec)

mysql> insert into StringReplaceDemo values(1003,'https://mail.google.com');
Query OK, 1 row affected (0.12 sec)

3. 登録したデータを確認する

SELECT文ですべてのレコードを表示してみます。

mysql> select *from StringReplaceDemo;

実行結果は以下の通りです。

+------+--------------------------+
| Id   | URL                      |
+------+--------------------------+
| 1001 | https://www.google.co.in |
| 1002 | https://www.facebook.com |
| 1003 | https://mail.google.com  |
+------+--------------------------+
3 rows in set (0.00 sec)

4. REPLACE()関数で文字列を置換する

上記の結果を見ると、Id=1003のURLに「mail」という文字列が含まれています。そこで、UPDATE文とREPLACE()関数を組み合わせて、「mail」を「www」に置き換えてみましょう。

mysql> update StringReplaceDemo set URL = replace(URL,'mail','www') where URL like '%mail%';
Query OK, 1 row affected (0.15 sec)
Rows matched: 1 Changed: 1 Warnings: 0

WHERE句でLIKE '%mail%'と指定することで、「mail」を含むレコードだけを対象に更新できます。該当しない行には不要な更新処理が走らないため、パフォーマンス面でも有利です。

5. 置換結果を確認する

再度SELECT文を実行して、置換が正しく反映されたかをチェックします。

mysql> select *from StringReplaceDemo;

以下の出力のように、「https://mail.google.com」が「https://www.google.com」に変わり、置換が正常に行われたことが確認できます。

+------+--------------------------+
| Id   | URL                      |
+------+--------------------------+
| 1001 | https://www.google.co.in |
| 1002 | https://www.facebook.com |
| 1003 | https://www.google.com   |
+------+--------------------------+
3 rows in set (0.00 sec)

まとめ:REPLACE()関数の基本構文

MySQLにはPHPのようなstr_replace関数は存在しませんが、REPLACE()関数を使えば同等の処理が可能です。基本構文は以下の通りです。

REPLACE(対象文字列, 置換前の文字列, 置換後の文字列)

SELECT句内で使えば表示結果だけを置換することもでき、UPDATE文と組み合わせればテーブル内のデータを一括で書き換えられます。ドメイン変更時のURL修正や、誤登録された文字列の訂正など、実務でも活躍する場面が多い関数なので、ぜひ覚えておきましょう。

  1. MySQLクエリでSELECT NULLステートメントは使用できる?具体例で解説

    MySQLのSELECT文でNULLを取得できるのか?結論から言うと、はい、MySQLのクエリではSELECT NULLステートメントを使用できます。NULLをそのまま選択対象として指定すると、結果セットにはNULL値が返されます。この記事では、実際にテーブルを作成し、SELECT NULLがどのように動作するのかを順を追って確認していきます。1. テーブルの作成まずはサンプル用のテーブルを作成しましょう。mysql> create table DemoTable ( Name varchar(100) ); Query OK, 0 rows affected (0.49 sec

  2. MySQLクエリで「LIKE concat()」を使用することはできる?

    はい、MySQLではLIKE句とconcat()関数を組み合わせて使用することが可能です。concat()関数で動的にパターン文字列を生成し、それをLIKE句の検索条件として利用できます。実際にサンプルを使って手順を見ていきましょう。まず、テーブルを作成します。mysql> create table DemoTable ( Name varchar(50) ); Query OK, 0 rows affected (0.63 sec)次に、insertコマンドを使ってテーブルにレコードを挿入します。mysql> insert into DemoTable values(Jo