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

MySQLでテーブルを更新し、新しい列に名前のイニシャルを表示する方法

MySQLでは、LEFT()関数とSUBSTRING_INDEX()関数を組み合わせることで、氏名からイニシャル(頭文字)だけを取り出すことができます。この記事では、実際にテーブルを作成し、既存のデータからイニシャルを生成して新しい列に格納する手順を解説します。

1. テーブルの作成

まず、氏名を保存する「full_name」列と、イニシャルを格納する「short_name」列を持つテーブルを作成しましょう。

mysql> create table demo13
-> (
-> full_name varchar(100),
-> short_name varchar(20)
-> );
Query OK, 0 rows affected (1.18 sec)

2. テストデータの挿入

次に、INSERT文を使ってサンプルデータを登録します。ここでは「short_name」はまだ空のままにしておきます。

mysql> insert into demo13(full_name) values('John Smith');
Query OK, 1 row affected (0.27 sec)

mysql> insert into demo13(full_name) values('David Miller');
Query OK, 1 row affected (0.13 sec)

mysql> insert into demo13(full_name) values('Chris Brown');
Query OK, 1 row affected (0.28 sec)

3. データの確認

SELECT文で現在のデータを確認してみましょう。

mysql> select *from demo13;

実行結果は以下のとおりです。「short_name」列にはまだNULLが入っています。

+--------------+------------+
| full_name    | short_name |
+--------------+------------+
| John Smith   | NULL       |
| David Miller | NULL       |
| Chris Brown  | NULL       |
+--------------+------------+
3 rows in set (0.00 sec)

4. UPDATE文でイニシャルを生成する

ここがポイントです。LEFT()関数で文字列の先頭1文字を取得し、SUBSTRING_INDEX()関数で姓(スペース以降の部分)を切り出したうえで、その先頭1文字を取得します。両者をCONCAT()で連結すれば、名と姓それぞれの頭文字からなるイニシャルが完成します。

mysql> update demo13
-> set short_name= concat(
-> left(full_name, 1),
-> left(substring_index(full_name, ' ', -1), 1)
-> );
Query OK, 3 rows affected (0.14 sec)
Rows matched: 3 Changed: 3 Warnings: 0

クエリの仕組み

  • left(full_name, 1):氏名全体の最初の1文字(名の頭文字)を取得します。
  • substring_index(full_name, ' ', -1):スペース区切りの最後の部分(姓)を抽出します。
  • left(..., 1):その姓の最初の1文字を取得します。
  • concat(...):名と姓の頭文字を連結してイニシャルを作ります。

5. 更新結果の確認

再度SELECT文を実行して、更新後のデータを確認しましょう。

mysql> select *from demo13;

実行結果は以下のとおりです。「short_name」列に各氏名のイニシャルが正しく格納されました。

+--------------+------------+
| full_name    | short_name |
+--------------+------------+
| John Smith   | JS         |
| David Miller | DM         |
| Chris Brown  | CB         |
+--------------+------------+
3 rows in set (0.00 sec)

まとめ

LEFT()SUBSTRING_INDEX()を組み合わせれば、SQLだけで氏名からイニシャルを簡単に抽出できます。ミドルネームがある場合や複数のスペースが含まれる場合にも応用できるため、ユーザー名の表示形式を整えたい場面などでぜひ活用してください。

  1. MySQLで45日後の日付を計算し、新しい列として表示するクエリの書き方

    MySQLで45日後の日付を新しい列に表示する方法 日付・時刻型の列に45日を加算し、その結果を元の列とは別の新しい列として表示したい場合は、date_add() 関数を使うのが最も簡単です。ここでは、テーブルの作成からデータの挿入、そして45日を加算するクエリの実行まで、手順を追って解説します。 1. テーブルを作成する まず、DATETIME型の列「DueTime」を持つテーブルを作成します。 mysql> create table DemoTable1930 ( DueTime datetime ); Query OK, 0 rows affected (

  2. MySQLでテーブル内の各レコードの出現回数をカウントし、結果を新しい列として表示する方法

    MySQLのテーブル内で同じ値が何回出現するかをカウントし、その結果を新しい列として表示したい場合があります。このような集計処理には、COUNT(*)関数とGROUP BY句を組み合わせて使用します。 サンプルテーブルの作成 まず、動作確認用のテーブルを作成しましょう。 mysql> create table DemoTable1942 ( Value int ); Query OK, 0 rows affected (0.00 sec) INSERTコマンドを使って、いくつかのレコードを挿入します。 mysql> insert into DemoTable