MySQLのSUBSTRING_INDEX関数で氏名を3つの部分に分割する方法
MySQLのSUBSTRING_INDEX()関数は、指定した区切り文字に基づいて文字列を分割できる便利な関数です。本記事では、この関数を活用して、氏名(フルネーム)を「名(First_Name)」「ミドルネーム(Middle_Name)」「姓(Last_Name)」の3つの部分に分割する方法を具体的に解説します。
サンプルデータの確認
説明のため、以下のような「customerdetail」というテーブルを使用します。このテーブルには、氏名、父親の名前、住所、メールアドレスが登録されています。
mysql> Select * from Customerdetail; +----------------------+----------------------+----------+---------------------+ | Name | FName | Address | Emailid | +----------------------+----------------------+----------+---------------------+ | Advik Jhamb | Lovkesh Jhamb | Mumbai | Advik@gmail.com | | Chirag Jai Patil | Raman Jai Patil | Gujrat | chirahp@yahoo.com | | Devansh Singh Rajput | Kishore Singh Rajput | Rajastan | Devansh@Hotmail.com | | Mitul Kumar Sharma | Om Veer Sharma | Patiala | Mitul@gmail.com | +----------------------+----------------------+----------+---------------------+ 4 rows in set (0.00 sec)
氏名を3つの部分に分割するクエリ
それでは、Nameカラムの値を「First_Name」「Middle_Name」「Last_Name」の3つに分割してみましょう。以下のクエリを実行します。
mysql> SELECT Name, SUBSTRING_INDEX(SUBSTRING_INDEX(Name, ' ', 1), ' ', -1) AS First_Name, If( length(Name) - length(replace(Name, ' ', ''))>1, SUBSTRING_INDEX(SUBSTRING_INDEX(Name, ' ', 2), ' ', -1), NULL) AS Middle_Name, SUBSTRING_INDEX(SUBSTRING_INDEX(Name, ' ', 3), ' ', -1) AS Last_Name, Address FROM customerdetail; +----------------------+------------+-------------+-----------+----------+ | Name | First_Name | Middle_Name | Last_Name | Address | +----------------------+------------+-------------+-----------+----------+ | Advik Jhamb | Advik | NULL | Jhamb | Mumbai | | Chirag Jai Patil | Chirag | Jai | Patil | Gujrat | | Devansh Singh Rajput | Devansh | Singh | Rajput | Rajastan | | Mitul Kumar Sharma | Mitul | Kumar | Sharma | Patiala | +----------------------+------------+-------------+-----------+----------+ 4 rows in set (0.00 sec)
クエリの仕組みと実行結果の解説
上記の実行結果を見ると、氏名が正しく3つの部分に分割されていることがわかります。それぞれの抽出ロジックは次の通りです。
- First_Name:SUBSTRING_INDEX(Name, ' ', 1) によって、最初のスペースより前の部分(最初の単語)を取得します。
- Middle_Name:氏名に含まれるスペースの数が2以上の場合のみ、SUBSTRING_INDEX(Name, ' ', 2) の末尾部分をミドルネームとして取得します。スペースが1つしかない場合(=ミドルネームが存在しない場合)はNULLを返します。
- Last_Name:SUBSTRING_INDEX(Name, ' ', 3) によって、末尾の部分(最後の単語)を取得します。
たとえば「Advik Jhamb」のように名前が2語のみの場合、ミドルネームは存在しないためNULLと表示されます。一方、「Chirag Jai Patil」のように3語ある場合は、「Jai」がミドルネームとして正しく抽出されていることが確認できます。
まとめ
SUBSTRING_INDEX関数を組み合わせて使うことで、SQLだけで柔軟に氏名の分割処理を実現できます。さらに、IF関数とLENGTH・REPLACE関数を併用することで、ミドルネームの有無も自動的に判定できるため、データ形式が不統一なテーブルでも安心して活用できます。
-
MySQLのSUBSTRING_INDEX()関数で文字列を分割する方法を徹底解説
MySQLで文字列を特定の区切り文字で分割したい場合、SUBSTRING_INDEX() 関数が非常に便利です。この記事では、サンプルテーブルの作成から、氏名を「名」と「姓」に分割するクエリの実行まで、具体的な手順をわかりやすく解説します。 SUBSTRING_INDEX()関数とは SUBSTRING_INDEX(str, delim, count) は、区切り文字 delim の count 回目の出現位置を基準に部分文字列を返す関数です。count が正の値の場合は左側から、負の値の場合は右側から数えます。この特性を組み合わせることで、柔軟に文字列を分割できます。 サンプルテーブルの作成
-
MySQLで文字列の一部(@以降のドメイン名)を置き換える方法
MySQLでは、REPLACE()関数を使うことで、文字列の一部を簡単に別の文字列へ置き換えることができます。たとえば、メールアドレスのドメイン部分(@以降)を一括で変更したい場合に非常に便利です。ここでは、実際にテーブルを作成し、メールアドレスのドメインを置き換える手順を解説します。 1. テーブルの作成 まず、サンプル用のテーブルを作成します。 mysql> create table DemoTable -> ( -> EmailId varchar(30) -> ); Query OK, 0 rows affected (0.53 sec