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

【MySQL】SUBSTRING_INDEX()で文字列を分割し最後の単語を取得する方法

MySQLで「Learn With Ease」のような複数単語の文字列を分割し、最後の単語だけを取り出したい場合には、SUBSTRING_INDEX()関数が便利です。この記事では、テーブル作成からデータ挿入、実際に文字列を分割するクエリの実行まで、サンプルコード付きで順番に解説します。

SUBSTRING_INDEX()関数とは

SUBSTRING_INDEX()は、指定した区切り文字を基準に文字列を分割し、一部を取得できる関数です。「SUBSTRING_INDEX(対象文字列, 区切り文字, 取得位置)」という形式で使い、第3引数に負の値を指定すると文字列の末尾から数えて取得できます。今回のように「最後の単語」が欲しい場合は「-1」を指定するのがポイントです。

サンプルテーブルを作成する

まず、文字列を格納するためのテーブルを作成します。

mysql> create table DemoTable
(
    Words TEXT
);
Query OK, 0 rows affected (1.62 sec)

レコードを挿入する

INSERT文を使って、複数の文字列データを登録しましょう。

mysql> insert into DemoTable values('Learn With Ease');
Query OK, 1 row affected (0.32 sec)
mysql> insert into DemoTable values('Intro To MySQL');
Query OK, 1 row affected (0.35 sec)
mysql> insert into DemoTable values('Deep Dive Using Java');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('C++ In Depth');
Query OK, 1 row affected (0.16 sec)

登録内容を確認する

SELECT文ですべてのレコードを表示します。

mysql> select *from DemoTable;

実行結果は以下の通りです。

+-----------------------+
| Words                 |
+-----------------------+
| Learn With Ease       |
| Intro To MySQL        |
| Deep Dive Using Java  |
| C++ In Depth          |
+-----------------------+
4 rows in set (0.00 sec)

文字列を分割して最後の単語を取得するクエリ

それが本題となるクエリです。UPDATE文の中でSUBSTRING_INDEX()を使い、区切り文字に半角スペース、取得位置に「-1」を指定します。これにより、各文字列の末尾にある単語だけが残ります。

mysql> update DemoTable set Words=substring_index(Words,' ',-1);
Query OK, 4 rows affected (0.28 sec)
Rows matched : 4  Changed : 4  Warnings : 0

更新後の結果を確認する

再度テーブルの内容を確認してみましょう。

mysql> select *from DemoTable;

実行結果を見ると、各行から最後の単語だけが正しく抽出されていることが分かります。

+----------+
| Words    |
+----------+
| Ease     |
| MySQL    |
| Java     |
| Depth    |
+----------+
4 rows in set (0.00 sec)

まとめ

文字列の最後の単語を取得したい場合は、SUBSTRING_INDEX(文字列, ' ', -1)と書くだけでOKです。逆に先頭の単語を取得したいときは第3引数に「1」を指定します。また、データを更新せずに表示時だけ加工したいケースでは、「SELECT substring_index(Words, ' ', -1) FROM DemoTable;」のようにSELECT文内で直接使うこともできます。用途に応じて使い分けると、文字列処理がぐっと楽になりますよ。

  1. MySQLでテーブルをクエリし、直近3日より前に投稿された行を取得する方法

    はじめにここでは、現在の日付を「2019-10-20」として話を進めます。まずは例として、テーブルを作成してみましょう。mysql> create table DemoTable1582 -> ( -> PostedDate datetime -> );Query OK, 0 rows affected (13.36 sec)レコードの挿入insertコマンドを使用して、テーブルにいくつかのレコードを挿入します。mysql> insert into DemoTable1582 values(2019-01-21 12:34:40);Query O

  2. MySQLのLIKE句で行を抽出し、マッチした文字列を新しい列として表示する方法

    MySQLでLIKE句を使って特定の文字列を含む行を抽出し、さらにそのマッチした文字列自体を新しい列として表示したい場合があります。このような処理には、SUBSTRING()関数とLOCATE()関数を組み合わせて使用します。ここでは、実際にサンプルテーブルを作成しながら手順を確認していきましょう。1. サンプルテーブルの作成まず、以下のようにテーブルを作成します。mysql> create table DemoTable1872 ( Name varchar(20) ); Query OK, 0 rows affected (0.00 sec)2. レコードの挿