MySQLでスラッシュ区切りの文字列から部分文字列を取得する方法【SUBSTRING_INDEX活用】
MySQLでスラッシュ区切りの文字列から部分文字列を取得する方法
MySQLで「101/John/Smith」のようにスラッシュ(/)で区切られた文字列から、特定の部分文字列を取り出したい場合には、SUBSTRING_INDEX() 関数を使用すると便利です。この関数を使えば、指定した区切り文字を基準にして文字列の一部を簡単に抽出できます。
まずはサンプル用のテーブルを作成しましょう。
mysql> create table DemoTable1416
-> (
-> StudentCode varchar(100)
-> );
Query OK, 0 rows affected (1.56 sec)テーブルへのデータ挿入
次に、INSERT文を使っていくつかのレコードを追加します。
mysql> insert into DemoTable1416 values('101/John/Smith');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable1416 values('901/Carol/Taylor');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable1416 values('400/David/Miller');
Query OK, 1 row affected (0.12 sec)登録済みレコードの確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> select * from DemoTable1416;
実行結果は以下の通りです。
+------------------+ | StudentCode | +------------------+ | 101/John/Smith | | 901/Carol/Taylor | | 400/David/Miller | +------------------+ 3 rows in set (0.00 sec)
SUBSTRING_INDEX()で部分文字列を取得するクエリ
以下が、スラッシュ区切りの文字列から部分文字列を取得するためのクエリです。第2引数に区切り文字「/」を、第3引数に「-2」を指定しています。
mysql> select substring_index(StudentCode,'/',-2) from DemoTable1416;
実行結果は次のようになります。
+-------------------------------------+ | substring_index(StudentCode,'/',-2) | +-------------------------------------+ | John/Smith | | Carol/Taylor | | David/Miller | +-------------------------------------+ 3 rows in set (0.00 sec)
SUBSTRING_INDEX()の仕組み
SUBSTRING_INDEX() の第3引数に負の値を指定すると、文字列の右側(末尾)から数えて指定した回数目の区切り文字より後ろの部分を返します。上記の例では「-2」を指定しているため、「101/John/Smith」の場合は末尾から2番目のスラッシュ以降、すなわち「John/Smith」が取得されます。
一方、正の値(例:2)を指定した場合は、左側から2番目の区切り文字より前の部分(この例では「101/John」)が返されます。用途に応じて正負の値を使い分けることで、柔軟に文字列を操作できます。
-
MySQLでランダムな行を取得する方法|ORDER BY RAND()を使った抽出テクニック
MySQLでランダムな行を取得する基本MySQLでランダムに行を取得したい場合、最も手軽な方法は ORDER BY RAND() を使うことです。この記事では、カンマ区切りの値を格納したデータを例に、特定の値を除外しながらランダムに行を抽出する方法をステップごとに解説します。1. サンプルテーブルを作成するまず、IDのリストを保存するためのシンプルなテーブルを作成します。mysql> create table DemoTable1835 ( ListOfIds varchar(20) &
-
MySQLで文字列や数値が混在するカラムから特定のレコードを取得する方法
文字列・数値・特殊文字が混在するカラムから特定のレコードを取得したい場合は、ORDER BY CAST() を活用すると便利です。この記事では、SUBSTRING() 関数と組み合わせて、「指定した文字列で始まるレコードの中から、数値部分が最も大きいもの」を抽出する方法を、実際のSQL例とともにわかりやすく解説します。 サンプルテーブルの作成 まず、CREATE TABLE文でテーブルを作成します。 mysql> create table DemoTable2006 ( UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY, Us