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形式のデータを扱う際にも応用できる便利なテクニックなので、ぜひ覚えておきましょう。
-
C#で正規表現を使って文字列を分割する方法を解説
C#で正規表現を使用して文字列を分割するには、Regex.Splitメソッドを利用します。このメソッドは、指定した正規表現パターンに一致する箇所で文字列を分割し、結果を文字列の配列として返します。基本的な使い方例として、改行コード()を含む次の文字列を考えてみましょう。string str = Hello\r\nWorld;この文字列をRegex.Splitを使って分割すると、以下のようになります。string[] res = Regex.Split(str, \r\n);サンプルコード以下は、C#で正規表現を使って文字列を分割する完全なサンプルコードです。using System; usin
-
C#で文字列を反転させる方法【Array.Reverse()の使い方】
C#で文字列を逆順にする基本の方法C#で文字列を反転(リバース)したい場合は、Array.Reverse()メソッドを使うのが最もシンプルです。このメソッドは配列の要素の並びをその場で反転できるため、まず文字列を文字配列(char[])に変換してから適用する流れになります。手順1:反転したい文字列を用意する最初に、反転対象となる文字列を定義します。string str = "Amit";手順2:文字列を文字配列に変換するArray.Reverse()は配列に対して機能するため、ToCharArray()メソッドを使って文字列を文字配列へ変換します。char[] ch = s