MySQLで文字列内の特定の文字を置き換える方法|CONCATとSUBSTRINGの使い方
MySQLで文字列の中の特定の位置にある文字だけを変更したい場合、CONCAT()関数とSUBSTRING()関数を組み合わせることで実現できます。UPDATE文やREPLACE()関数を使わなくても、SELECT文だけで指定した位置の文字を別の文字に置き換えて表示できるのが特徴です。
基本的な考え方
この手法では、文字列を「変更したい文字の前まで」「置き換える文字」「変更したい文字の後から」の3つに分割し、CONCAT()で連結し直します。
- SUBSTRING(列名, 開始位置, 文字数):指定した開始位置から指定した文字数分だけ部分文字列を取り出す
- SUBSTRING(列名, 開始位置):指定した開始位置から末尾まですべて取り出す
- CONCAT(文字列1, 文字列2, ...):複数の文字列を連結する
サンプルテーブルの作成
まず、動作確認用のテーブルを作成しましょう。
mysql> create table DemoTable
(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
Value varchar(200)
);
Query OK, 0 rows affected (0.60 sec)テストデータの挿入
INSERT文を使ってレコードを追加します。
mysql> insert into DemoTable(Value) values('98764');
Query OK, 1 row affected (0.17 sec)登録データの確認
SELECT文でテーブル内の全レコードを表示してみます。
mysql> select *from DemoTable;
実行すると次のような結果が得られます。
+----+-------+ | Id | Value | +----+-------+ | 1 | 98764 | +----+-------+ 1 row in set (0.00 sec)
特定の文字を置き換えるクエリ
ここでは、「98764」という文字列の4文字目にある「6」を「X」に変更してみます。以下のようにクエリを記述します。
mysql> select concat(substring(Value,1,3),'X',substring(Value,5)) from DemoTable;
このクエリの処理内容は以下の通りです。
substring(Value,1,3):先頭から3文字目までの「987」を取り出す'X':4文字目に入れる置き換え後の文字substring(Value,5):5文字目以降の「4」を取り出す
これらをCONCAT()で連結することで、目的の位置だけが変更された文字列が生成されます。
実行結果
クエリを実行すると、次の出力が得られます。
+-----------------------------------------------------+ | concat(substring(Value,1,3),'X',substring(Value,5)) | +-----------------------------------------------------+ | 987X4 | +-----------------------------------------------------+ 1 row in set (0.00 sec)
元の「98764」に対して、4文字目の「6」だけが「X」に置き換わり、「987X4」と表示されました。
応用ポイント
この方法はSELECT文での表示だけでなく、UPDATE文と組み合わせて実際にテーブルのデータを更新することも可能です。また、固定位置ではなく特定の文字そのものを置き換えたい場合は、REPLACE()関数を使用するのが適しています。用途に応じて使い分けるとよいでしょう。
-
MySQLで特定のカラムの値を交換・更新する方法
はじめにMySQLでは、UPDATE文とWHERE句を組み合わせることで、特定の条件に一致する行のカラム値を簡単に変更できます。この記事では、サンプルテーブルを作成し、特定のカラムの値を別の値に置き換える手順を、実際の実行例とともにわかりやすく解説します。テーブルの作成まず、以下のコマンドでテーブルを作成します。mysql> create table DemoTable1504 -> ( -> Id int, -> FirstName
-
MySQLの終了ステートメント(デリミタ)を変更する方法
```html MySQLでは、ストアドプロシージャやトリガーなどを作成する際、処理の中にセミコロン(;)が含まれるため、デフォルトの終了記号のままでは正しく実行できないことがあります。そんなときは、DELIMITERコマンドを使って、文の終了記号を任意の記号に変更しましょう。DELIMITERコマンドの基本構文DELIMITER 任意の記号上記の「任意の記号」の部分には、自由に設定したい記号を指定できます。デフォルトの終了記号は「;」(セミコロン)で、一般的には「//」や「$$」などがよく使われます。実際の使用例それでは、まず終了記号を「//」に変更してテーブルを作成してみましょう。mysq