MySQLでスラッシュ区切りの文字列から中央部分を抽出する方法
MySQLでは、SUBSTRING_INDEX関数を組み合わせて使うことで、スラッシュ(/)で囲まれた文字列の中央部分を簡単に取り出すことができます。この記事では、実際のテーブル作成からデータ取得までの手順を順を追って解説します。
1. サンプルテーブルを作成する
まず、デモ用のテーブルを作成しましょう。
mysql> create table DemoTable
-> (
-> Code varchar(100)
-> );
Query OK, 0 rows affected (1.07 sec)Codeカラムには、スラッシュで区切られたコード文字列を格納することを想定しています。
2. テストデータを挿入する
次に、INSERT文を使っていくつかのレコードを登録します。
mysql> insert into DemoTable values('/101/102/106');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('/110/111/101');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('/111/114/201');
Query OK, 1 row affected (0.47 sec)3. 登録したデータを確認する
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from DemoTable;
実行すると、以下のような結果が得られます。
+--------------+ | Code | +--------------+ | /101/102/106 | | /110/111/101 | | /111/114/201 | +--------------+ 3 rows in set (0.00 sec)
4. スラッシュで囲まれた中央部分を取得するクエリ
ここが本題です。スラッシュに挟まれた中央の文字列を取得するには、SUBSTRING_INDEX関数を2段階で使用します。
mysql> select SUBSTRING_INDEX(SUBSTRING_INDEX(Code,'/',3),'/',-1) from DemoTable;
クエリの仕組み
- 内側のSUBSTRING_INDEX(Code,'/',3):先頭から数えて3番目のスラッシュまでの部分文字列を取得します。例えば「/101/102/106」なら「/101/102」が返されます。
- 外側のSUBSTRING_INDEX(...,'/',-1):その結果に対して、末尾から数えて最初のスラッシュ以降の部分を取得します。これにより「102」だけが残ります。
実行結果
上記のクエリを実行すると、以下の出力が得られます。
+-----------------------------------------------------+ | SUBSTRING_INDEX(SUBSTRING_INDEX(Code,'/',3),'/',-1) | +-----------------------------------------------------+ | 102 | | 111 | | 114 | +-----------------------------------------------------+ 3 rows in set (0.00 sec)
このように、各行から中央のコード(102、111、114)だけを正確に抽出できていることがわかります。
まとめ
SUBSTRING_INDEX関数は、区切り文字で分割された文字列から特定の位置の要素を取り出す際に非常に便利です。ネストして使うことで、「N番目の要素」を柔軟に取得できます。CSV形式のようなデータやパス文字列を扱う場合にぜひ活用してください。
-
MySQLでスラッシュ区切りの文字列から部分文字列を取得する方法【SUBSTRING_INDEX活用】
MySQLでスラッシュ区切りの文字列から部分文字列を取得する方法MySQLで「101/John/Smith」のようにスラッシュ(/)で区切られた文字列から、特定の部分文字列を取り出したい場合には、SUBSTRING_INDEX() 関数を使用すると便利です。この関数を使えば、指定した区切り文字を基準にして文字列の一部を簡単に抽出できます。まずはサンプル用のテーブルを作成しましょう。mysql> create table DemoTable1416 -> ( -> StudentCode varchar(100) -> ); Query OK, 0
-
MySQLでドットより前の文字列を一括置換する方法:CONCATとSUBSTRING_INDEXの活用術
MySQLで、小数点(ドット)より前の部分だけを別の文字列に置き換えたい場面は意外と多くあります。そんなときに役立つのが、CONCAT() 関数と SUBSTRING_INDEX() 関数を組み合わせた方法です。この記事では、実際のテーブルを使いながら手順をわかりやすく解説します。1. テーブルの作成まずはサンプル用のテーブルを作成します。mysql> create table DemoTable1424 -> ( -> Value varchar(60) &nb