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

MySQLのSUBSTRING_INDEX()関数で文字列を分割する方法を徹底解説

MySQLで文字列を特定の区切り文字で分割したい場合、SUBSTRING_INDEX() 関数が非常に便利です。この記事では、サンプルテーブルの作成から、氏名を「名」と「姓」に分割するクエリの実行まで、具体的な手順をわかりやすく解説します。

SUBSTRING_INDEX()関数とは

SUBSTRING_INDEX(str, delim, count) は、区切り文字 delim の count 回目の出現位置を基準に部分文字列を返す関数です。count が正の値の場合は左側から、負の値の場合は右側から数えます。この特性を組み合わせることで、柔軟に文字列を分割できます。

サンプルテーブルの作成

まず、テーブルを作成します。

mysql> create table DemoTable1465
   -> (
   -> Name varchar(40)
   -> );
Query OK, 0 rows affected (0.54 sec)

レコードの挿入

INSERTコマンドを使用して、テーブルにいくつかのレコードを挿入します。

mysql> insert into DemoTable1465 values('Chris Brown');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1465 values('David Miller');
Query OK, 1 row affected (0.26 sec)
mysql> insert into DemoTable1465 values('John Doe');
Query OK, 1 row affected (0.14 sec)

テーブル内容の確認

SELECT文を使用して、テーブル内のすべてのレコードを表示します。

mysql> select * from DemoTable1465;

これにより、次のような出力が得られます。

+--------------+
| Name         |
+--------------+
| Chris Brown  |
| David Miller |
| John Doe     |
+--------------+
3 rows in set (0.00 sec)

SUBSTRING_INDEX()で氏名を分割する

以下は、SUBSTRING_INDEX() を使用して MySQL で文字列を分割するクエリです。ここでは、「Name」カラムの値を名(ファーストネーム)と姓(ラストネーム)に分割しています。

mysql> select
   -> substring_index(substring_index(Name, ' ', 1), ' ', -1) as StudentFirstName,
   ->  substring_index(substring_index(Name, ' ', 3), ' ', -1) AS StudentLastName
   -> from DemoTable1465;

実行すると、次のような結果が出力されます。

+------------------+-----------------+
| StudentFirstName | StudentLastName |
+------------------+-----------------+
| Chris            |           Brown |
| David            |          Miller |
| John             |             Doe |
+------------------+-----------------+
3 rows in set (0.00 sec)

クエリのポイント解説

StudentFirstName(名)の取得: 内側の substring_index(Name, ' ', 1) で最初のスペースより前の部分を取得し、外側の substring_index(..., ' ', -1) でその部分だけを確実に取り出しています。

StudentLastName(姓)の取得: 内側の substring_index(Name, ' ', 3) で3番目のスペースまでの文字列全体を取得し、外側の substring_index(..., ' ', -1) で最後の単語を取り出しています。この書き方なら、ミドルネームが含まれるケースにも対応できます。

このように SUBSTRING_INDEX() を入れ子にして使うことで、複雑な文字列分割も SQL だけでシンプルに実現できます。ログデータやCSV形式のデータを扱う際にも応用できる便利なテクニックなので、ぜひ覚えておきましょう。

  1. C#で正規表現を使って文字列を分割する方法を解説

    C#で正規表現を使用して文字列を分割するには、Regex.Splitメソッドを利用します。このメソッドは、指定した正規表現パターンに一致する箇所で文字列を分割し、結果を文字列の配列として返します。基本的な使い方例として、改行コード()を含む次の文字列を考えてみましょう。string str = Hello\r\nWorld;この文字列をRegex.Splitを使って分割すると、以下のようになります。string[] res = Regex.Split(str, \r\n);サンプルコード以下は、C#で正規表現を使って文字列を分割する完全なサンプルコードです。using System; usin

  2. C#で文字列を反転させる方法【Array.Reverse()の使い方】

    C#で文字列を逆順にする基本の方法C#で文字列を反転(リバース)したい場合は、Array.Reverse()メソッドを使うのが最もシンプルです。このメソッドは配列の要素の並びをその場で反転できるため、まず文字列を文字配列(char[])に変換してから適用する流れになります。手順1:反転したい文字列を用意する最初に、反転対象となる文字列を定義します。string str = "Amit";手順2:文字列を文字配列に変換するArray.Reverse()は配列に対して機能するため、ToCharArray()メソッドを使って文字列を文字配列へ変換します。char[] ch = s