MySQLでハイフンより前の文字列を抽出する方法|SUBSTRING_INDEX関数の使い方
MySQLでは、SUBSTRING_INDEX() 関数を使うことで、特定の区切り文字(この例ではハイフン「-」)より前にある文字列を簡単に抽出できます。本記事では、実際にテーブルを作成し、データを挿入して、ハイフンより前の部分だけを取得する手順を解説します。
1. サンプルテーブルの作成
まず、以下のコマンドでサンプル用のテーブルを作成します。
mysql> create table DemoTable1857
(
Name varchar(20)
);
Query OK, 0 rows affected (0.00 sec)
2. テストデータの挿入
次に、INSERT文を使ってハイフンを含む名前データを登録します。
mysql> insert into DemoTable1857 values('John-Smith');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1857 values('Brown-Chris');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1857 values('David-Carol-Miller');
Query OK, 1 row affected (0.00 sec)
SELECT文ですべてのレコードを確認してみましょう。
mysql> select * from DemoTable1857;
実行結果は以下のとおりです。
+--------------------+ | Name | +--------------------+ | John-Smith | | Brown-Chris | | David-Carol-Miller | +--------------------+ 3 rows in set (0.00 sec)
3. ハイフンより前の文字列を取得するクエリ
ここからが本題です。SUBSTRING_INDEX() 関数を使って、ハイフンより前の文字列を取得するクエリは以下のようになります。
mysql> select substring_index(Name,'-',1) Name from DemoTable1857;
SUBSTRING_INDEX(対象カラム, 区切り文字, 取得位置) の形式で指定し、第3引数に 1 を渡すことで、最初のハイフンより前の部分を取得できます。
実行結果は以下のとおりです。
+-------+ | Name | +-------+ | John | | Brown | | David | +-------+ 3 rows in set (0.00 sec)
補足:SUBSTRING_INDEX関数のポイント
- 第3引数が正の数の場合、左側から数えて指定した番目の区切り文字より前の文字列を返します。
- 負の数を指定すると、右側から数えた位置より後ろの文字列を返します(例:
SUBSTRING_INDEX(Name,'-',-1)でハイフン以降を取得)。 - 区切り文字が見つからない場合は、元の文字列全体がそのまま返されます。
このように SUBSTRING_INDEX() を活用すれば、「姓-名」のように区切り文字で結合されたデータから、必要な部分だけを柔軟に取り出すことが可能です。
-
MySQLのSELECT文で特定のカラム(列)のレコードを取得する方法
はじめにMySQLでSELECTクエリを実行する際、SELECT *を使うとすべてのカラムが取得されますが、カラム名を明示的に指定すれば、必要なカラム(列)のデータだけを効率的に取り出せます。この記事では、サンプルテーブルを作成しながら、特定のカラムのレコードを取得する手順を解説します。1. テーブルの作成まず、CREATE TABLE文でサンプル用のテーブルを作成しましょう。mysql> create table DemoTable1837 ( StudentId int NOT NULL AU
-
MySQLでテーブルから特定の行を抽出するクエリの書き方
MySQLでは、WHERE句とORDER BY、LIMITを組み合わせることで、テーブルから条件に合致する特定の行だけを効率的に取得できます。本記事では、実際にサンプルテーブルを作成し、特定の行を抽出するクエリの実行手順をわかりやすく解説します。 1. サンプルテーブルの作成 まず、CREATE TABLE文を使ってサンプル用のテーブルを作成します。ここでは「Section(組)」と「StudentName(生徒名)」という2つのカラムを持つテーブルを用意しました。 mysql> create table DemoTable1972 ( Section char(1),