MySQLでCONCAT()関数を使って文字列フィールドを連結して更新する方法
MySQLで文字列フィールドの値に別の文字列を連結して更新したい場合は、CONCAT()関数を使用します。UPDATE文の中でCONCAT()を組み合わせることで、既存の値を保持しながら新しい文字列を追加できます。
ここでは、実際の手順をサンプルとともに解説します。
1. テーブルの作成
まず、サンプル用のテーブルを作成します。
mysql> create table DemoTable
-> (
-> SequenceId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentId varchar(100)
-> );
Query OK, 0 rows affected (0.59 sec)
AUTO_INCREMENTの主キー「SequenceId」と、文字列型のカラム「StudentId」を持つシンプルなテーブルです。
2. レコードの挿入
INSERTコマンドでテーブルにデータを登録します。
mysql> insert into DemoTable(StudentId) values('STU');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(StudentId) values('STU1');
Query OK, 1 row affected (0.18 sec)3. 現在のデータを確認
SELECT文でテーブル内のすべてのレコードを表示します。
mysql> select *from DemoTable;
出力結果
+------------+-----------+
| SequenceId | StudentId |
+------------+-----------+
| 1 | STU |
| 2 | STU1 |
+------------+-----------+
2 rows in set (0.00 sec)
4. CONCAT()を使って文字列を連結して更新
以下は、StudentIdフィールドの既存の値に「-101」という文字列を連結して更新するクエリです。
mysql> update DemoTable
-> set StudentId=concat(StudentId,'-','101');
Query OK, 2 rows affected (0.14 sec)
Rows matched: 2 Changed: 2 Warnings: 0
ポイントは、concat(StudentId,'-','101')のように、連結対象の最初の引数にカラム名そのものを指定している点です。これにより、「元の値 + 区切り文字 + 追加したい文字列」という形で更新されます。
5. 更新後のデータを確認
再度SELECT文を実行して、更新結果を確認しましょう。
mysql> select *from DemoTable;
出力結果
+------------+-----------+
| SequenceId | StudentId |
+------------+-----------+
| 1 | STU-101 |
| 2 | STU1-101 |
+------------+-----------+
2 rows in set (0.00 sec)
すべての行でStudentIdの末尾に「-101」が連結され、正常に更新されていることがわかります。
補足:NULL値に注意
CONCAT()関数は、引数のいずれかにNULLが含まれていると、結果もNULLになってしまうという特徴があります。NULLが含まれる可能性があるカラムを連結する場合は、IFNULL()やCOALESCE()を組み合わせると安全です。
update DemoTable
set StudentId=concat(ifnull(StudentId,''),'-','101');
このように書けば、元の値がNULLだった場合でも空文字として扱われ、意図しないNULL更新を防ぐことができます。
-
MySQLでCOALESCE()を使ってNULLのフィールドのみを更新する方法
はじめに MySQLでは、NULLが含まれるレコードに対して、他のカラムの値を使って特定の1つのフィールドだけを更新したいケースがあります。そんなときに便利なのが COALESCE() 関数です。 COALESCE()は、引数の中から最初にNULLではない値を返す関数です。これをUPDATE文と組み合わせることで、NULLの場合だけ別のカラムの値で置き換えることができます。 サンプルテーブルの作成 まず、テーブルを作成しましょう。 mysql> create table DemoTable1805 ( &
-
MySQLでGROUP BYのように特定の1行だけ更新する方法|ORDER BYとLIMITを活用したUPDATE文の書き方
MySQLでは、UPDATE文の中でGROUP BYを直接使用することができません。しかし、「同じ値を持つ複数のレコードの中から、最初の1行だけを更新したい」というケースは実際の開発でよく発生します。 そんなときに役立つのが、ORDER BYとLIMITを組み合わせたUPDATE文です。この記事では、サンプルテーブルを使いながら、その具体的な手順をわかりやすく解説します。 1. サンプルテーブルを作成する まず、従業員情報を格納するテーブル「DemoTable2018」を作成します。テーブルには、自動採番される主キー「EmployeeId」、従業員名「EmployeeName」、給与「Emp