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

MySQLで特殊文字より前の部分文字列を抽出する方法|LOCATE()とSUBSTRING()の使い方

MySQLで、文字列内の特定の特殊文字(この例では「 - 」)より前の部分だけを抽出して表示したい場合があります。そんなときは、LOCATE() 関数と SUBSTRING() 関数を組み合わせることで簡単に実現できます。

この記事では、実際にテーブルを作成し、サンプルデータを使いながら手順を解説します。

1. サンプルテーブルの作成

まず、CREATE TABLE文でテーブルを作成します。

mysql> create table DemoTable
-> (
-> Title text
-> );
Query OK, 0 rows affected (0.54 sec)

2. サンプルデータの挿入

次に、INSERT文でレコードを挿入します。ここでは、「 - 」を含むデータと含まないデータの2件を用意しました。

mysql> insert into DemoTable values('Introduction To Java');
Query OK, 1 row affected (0.14 sec)

mysql> insert into DemoTable values('Introduction - To MySQL');
Query OK, 1 row affected (0.16 sec)

3. テーブルの内容を確認

SELECT文で全レコードを確認してみましょう。

mysql> select *from DemoTable;

出力結果

+-------------------------+
| Title |
+-------------------------+
| Introduction To Java |
| Introduction - To MySQL |
+-------------------------+
2 rows in set (0.00 sec)

4. 特殊文字より前の部分文字列を抽出するクエリ

以下が、特殊文字「 - 」より前の部分文字列を表示するためのクエリです。

mysql> select distinct
-> if(LOCATE(' - ',Title)>0, SUBSTRING(Title, 1, LOCATE(' - ', Title)), Title) from DemoTable;

出力結果

+-----------------------------------------------------------------------------+
| if(LOCATE(' - ',Title)>0, SUBSTRING(Title, 1, LOCATE(' - ', Title)), Title) |
+-----------------------------------------------------------------------------+
| Introduction To Java |
| Introduction |
+-----------------------------------------------------------------------------+
2 rows in set (0.00 sec)

クエリの仕組みを解説

このクエリがどのように動作しているのか、ポイントを分解して見ていきましょう。

① LOCATE() で特殊文字の位置を検索

LOCATE(' - ', Title) は、カラム Title の中に「 - 」という文字列が最初に出現する位置(先頭からの文字数)を返します。見つからない場合は 0 を返します。

  • 「Introduction - To MySQL」→ 「 - 」は14文字目にあるため 14 を返す
  • 「Introduction To Java」→ 「 - 」が存在しないため 0 を返す

② IF() で条件分岐

IF(条件, 真の場合の値, 偽の場合の値) の形式で、特殊文字が見つかったかどうかを判定しています。

  • LOCATE() の結果が 0 より大きい場合: 特殊文字が存在するので、SUBSTRING() で前半部分だけを取り出す
  • LOCATE() の結果が 0 の場合: 特殊文字が存在しないので、元の文字列をそのまま返す

③ SUBSTRING() で部分文字列を切り出し

SUBSTRING(Title, 1, LOCATE(' - ', Title)) は、1文字目から「 - 」の位置までの文字列を取り出します。これにより「Introduction」だけが抽出されます。

注意点:SUBSTRING() で切り出した結果には「 - 」自体も含まれます。末尾のハイフンや空白を取り除きたい場合は、TRIM(TRAILING ' - ' FROM ...) を組み合わせるとさらにきれいな結果が得られます。

まとめ

MySQLで特殊文字より前の部分文字列を抽出するには、以下の3つの関数を組み合わせます。

  • LOCATE():特殊文字の位置を検索する
  • SUBSTRING():指定した範囲の文字列を切り出す
  • IF():特殊文字が存在しない場合の処理を分岐させる

このパターンは、区切り文字の手前にあるデータだけを取り出したい場面(タイトルの分割、コードの整理など)で幅広く応用できます。ぜひ実際の開発でも活用してみてください。

  1. MySQLで末尾の文字列に基づいてレコードをソートする方法

    MySQLで文字列の末尾部分(例:「-D」や「-Smith」など)に基づいてレコードをソートしたい場合は、CASE式とORDER BY句を組み合わせることで実現できます。ここでは、実際のサンプルコードを使いながら、手順をわかりやすく解説します。 1. サンプルテーブルの作成 まずはデモ用のテーブルを作成します。顧客ID(ClientId)を自動採番の主キーとし、顧客名(ClientName)を格納するシンプルな構造です。 mysql> create table DemoTable -> ( -> ClientId int NOT NULL AUTO_INC

  2. MySQLでハイフンより前の文字列を抽出する方法|SUBSTRING_INDEX関数の使い方

    MySQLでは、SUBSTRING_INDEX() 関数を使うことで、特定の区切り文字(この例ではハイフン「-」)より前にある文字列を簡単に抽出できます。本記事では、実際にテーブルを作成し、データを挿入して、ハイフンより前の部分だけを取得する手順を解説します。 1. サンプルテーブルの作成 まず、以下のコマンドでサンプル用のテーブルを作成します。 mysql> create table DemoTable1857 ( Name varchar(20) ); Query OK, 0 rows affected (0.00 sec) 2. テストデータの挿入 次に、I