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

MySQLでスペース以降の文字列を削除する方法|SUBSTRING_INDEX()の使い方を解説

MySQLでは、SUBSTRING_INDEX() 関数を使うことで、カラム内のスペース(半角空白)より後ろのすべての文字列を簡単に削除できます。この記事では、基本的な構文から実際のサンプルデータを使った実行例まで、わかりやすく解説します。

SUBSTRING_INDEX() の基本構文

スペース以降の文字列を削除するには、以下のような構文を使用します。

SELECT SUBSTRING_INDEX(カラム名, ' ', 1) AS 別名 FROM テーブル名;

第3引数に「1」を指定することで、最初の区切り文字(この場合は半角空白)よりの部分だけが取得され、結果的にスペース以降が削除された状態になります。

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

まずは動作を確認するためのテーブルを作成しましょう。以下のクエリを実行します。

mysql> CREATE TABLE deleteAfterSpaceDemo
    -> (
    -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> StudentName varchar(100)
    -> );
Query OK, 0 rows affected (0.55 sec)

Id(自動採番の主キー)と StudentName(氏名)という2つのカラムを持つシンプルなテーブルです。

テストデータを挿入する

INSERT文を使って、「姓 名」の形式でスペースを含む氏名データを登録します。

mysql> INSERT INTO deleteAfterSpaceDemo(StudentName) VALUES('John Smith');
Query OK, 1 row affected (0.15 sec)
mysql> INSERT INTO deleteAfterSpaceDemo(StudentName) VALUES('Adam Smith');
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO deleteAfterSpaceDemo(StudentName) VALUES('Carol Taylor');
Query OK, 1 row affected (0.18 sec)
mysql> INSERT INTO deleteAfterSpaceDemo(StudentName) VALUES('Chris Brown');
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO deleteAfterSpaceDemo(StudentName) VALUES('David Miller');
Query OK, 1 row affected (0.15 sec)

登録済みデータを確認する

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

mysql> SELECT * FROM deleteAfterSpaceDemo;

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

+----+--------------+
| Id | StudentName  |
+----+--------------+
| 1  | John Smith   |
| 2  | Adam Smith   |
| 3  | Carol Taylor |
| 4  | Chris Brown  |
| 5  | David Miller |
+----+--------------+
5 rows in set (0.00 sec)

スペース以降を削除して抽出する

それでは、SUBSTRING_INDEX() を使ってスペース以降の文字列を削除した結果を取得してみます。

mysql> SELECT SUBSTRING_INDEX(StudentName, ' ', 1) AS deleteAllAfterSpace FROM deleteAfterSpaceDemo;

実行結果:

+---------------------+
| deleteAllAfterSpace |
+---------------------+
| John                |
| Adam                |
| Carol               |
| Chris               |
| David               |
+---------------------+
5 rows in set (0.04 sec)

このように、各氏名から名前部分(スペース以降)が取り除かれ、姓だけが抽出されていることが確認できます。

補足:実際にデータを更新したい場合

上記の例はあくまで表示時に加工しているだけで、元のテーブルのデータは変更されていません。テーブル内のデータそのものを書き換えたい場合は、UPDATE文と組み合わせて次のように実行します。

mysql> UPDATE deleteAfterSpaceDemo
    -> SET StudentName = SUBSTRING_INDEX(StudentName, ' ', 1);

また、逆に「スペース以降の文字列だけ」を取得したい場合は、第3引数に -1 を指定します。

SELECT SUBSTRING_INDEX(StudentName, ' ', -1) FROM deleteAfterSpaceDemo;

この場合、結果は「Smith」「Smith」「Taylor」「Brown」「Miller」となり、名前部分のみが抽出されます。

  1. MySQLで区切り文字の後の部分文字列を取得する方法

    ```html MySQLで区切り文字の後にある部分文字列を取得するには、SUBSTRING()関数とINSTR()関数を組み合わせて使用します。まず、サンプル用のテーブルを作成しましょう。 mysql> create table DemoTable -> ( -> Title text -> ); Query OK, 0 rows affected (0.56 sec) 次に、INSERTコマンドを使ってテーブルにレコードを挿入します。 mysql> insert into DemoTable values(John is good in MySQL,Sam i

  2. MySQLストアドプロシージャでDELETEクエリを実装する方法

    MySQLストアドプロシージャでDELETEクエリを実装する方法MySQLのストアドプロシージャを利用すれば、削除処理をひとつにまとめて再利用しやすくなり、パラメータを通じて動的に値を渡すことも可能です。ここでは、実際にサンプルテーブルを作成し、ストアドプロシージャ内でDELETEクエリを実行するまでの手順を解説します。1. サンプルテーブルの作成まず、動作確認用のテーブルを作成しましょう。mysql> create table DemoTable1464   -> (   -> Id int,   -> Fi