MySQLで文字列の最初の単語を抽出する方法(SUBSTRING_INDEX関数の使い方)
MySQLのクエリでカラムに格納された文字列から最初の単語だけを取り出したい場合は、SUBSTRING_INDEX() 関数を使うのが最も簡単です。この記事では、基本的な構文から実際のテーブルを使った動作例まで、順を追って解説します。
SUBSTRING_INDEX() の基本構文
最初の単語を取得するには、区切り文字として半角スペースを指定し、出現回数に「1」を設定します。構文は以下のとおりです。
SELECT SUBSTRING_INDEX(カラム名, ' ', 1) AS 別名 FROM テーブル名;
SUBSTRING_INDEX() は「対象の文字列」「区切り文字」「区切り文字が何回目に出現するか」という3つの引数を受け取ります。第3引数に1を指定すると、最初の区切り文字より前の部分、つまり先頭の単語が返されます。
サンプルテーブルの作成
まずは動作確認用のテーブルを作成しましょう。
mysql> CREATE TABLE DemoTable
(
StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentFullName varchar(40)
);
Query OK, 0 rows affected (0.61 sec)テストデータの挿入
INSERT文を使って、姓名がスペースで区切られたレコードを登録します。
mysql> INSERT INTO DemoTable(StudentFullName) VALUES('John Smith');
Query OK, 1 row affected (0.17 sec)
mysql> INSERT INTO DemoTable(StudentFullName) VALUES('Carol Taylor');
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO DemoTable(StudentFullName) VALUES('Bob Williams');
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO DemoTable(StudentFullName) VALUES('David Miller');
Query OK, 1 row affected (0.16 sec)登録データの確認
SELECT文でテーブルの中身を表示してみます。
mysql> SELECT * FROM DemoTable;
実行結果は以下のとおりです。
+-----------+-----------------+ | StudentId | StudentFullName | +-----------+-----------------+ | 1 | John Smith | | 2 | Carol Taylor | | 3 | Bob Williams | | 4 | David Miller | +-----------+-----------------+ 4 rows in set (0.00 sec)
最初の単語を抽出するクエリ
それでは、SUBSTRING_INDEX() を使って名前(ファーストネーム)にあたる最初の単語を取り出してみましょう。
mysql> SELECT SUBSTRING_INDEX(StudentFullName, ' ', 1) AS FirstWord FROM DemoTable;
実行結果は以下のとおりです。各氏名から最初の単語のみが抽出されていることがわかります。
+-----------+ | FirstWord | +-----------+ | John | | Carol | | Bob | | David | +-----------+ 4 rows in set (0.00 sec)
補足:応用テクニック
- 最後の単語を取得したい場合: 第3引数に
-1を指定すると、末尾側から数えた単語を取得できます。例:SUBSTRING_INDEX(StudentFullName, ' ', -1) - 区切り文字が存在しない場合: 文字列にスペースが含まれていないときは、文字列全体がそのまま返されます。エラーにはならないため安心して使えます。
- ミドルネーム対応: 「John A Smith」のように3つ以上の単語がある場合も、第3引数を1にすれば常に先頭の単語が取得できます。
このように、SUBSTRING_INDEX() を活用すれば、氏名やタグなどスペース・記号で区切られたデータから特定の部分を簡単に抽出できます。ぜひ実際の開発でも活用してみてください。
-
MySQLのSELECTで最初のN件のレコードをスキップする方法(OFFSETの使い方)
MySQLのSELECT文で先頭のレコードをスキップしたい場合は、OFFSETを使用します。OFFSETを指定すると、クエリ結果の最初の指定件数を飛ばして、それ以降のレコードだけを取得できます。この記事では、実際にテーブルを作成しながら、OFFSETの基本的な使い方を解説します。1. サンプルテーブルの作成まず、テーブルを作成します。mysql> create table DemoTable ( Name varchar(40) ); Query OK, 0 rows affected (0.63 sec)「Name」というカラムを1つだけ持つシンプルなテーブル「DemoTabl
-
MySQLでSELECTクエリを使用してデータを挿入(INSERT)する方法
MySQLでは、INSERT文とSELECTクエリを組み合わせることで、テーブルにデータを挿入することができます。通常、SELECTは既存のテーブルからデータを取得するために使われますが、値を直接指定してINSERTを実行する際にも活用できる便利な手法です。基本構文SELECTクエリを使用してINSERTを実行する場合の構文は以下の通りです。insert into yourTableName(yourColumnName1,yourColumnName2,yourColumnName3,...N) select yourValue1,yourValue2,yourValue3,......N;