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():特殊文字が存在しない場合の処理を分岐させる
このパターンは、区切り文字の手前にあるデータだけを取り出したい場面(タイトルの分割、コードの整理など)で幅広く応用できます。ぜひ実際の開発でも活用してみてください。
-
MySQLで末尾の文字列に基づいてレコードをソートする方法
MySQLで文字列の末尾部分(例:「-D」や「-Smith」など)に基づいてレコードをソートしたい場合は、CASE式とORDER BY句を組み合わせることで実現できます。ここでは、実際のサンプルコードを使いながら、手順をわかりやすく解説します。 1. サンプルテーブルの作成 まずはデモ用のテーブルを作成します。顧客ID(ClientId)を自動採番の主キーとし、顧客名(ClientName)を格納するシンプルな構造です。 mysql> create table DemoTable -> ( -> ClientId int NOT NULL AUTO_INC
-
MySQLでハイフンより前の文字列を抽出する方法|SUBSTRING_INDEX関数の使い方
MySQLでは、SUBSTRING_INDEX() 関数を使うことで、特定の区切り文字(この例ではハイフン「-」)より前にある文字列を簡単に抽出できます。本記事では、実際にテーブルを作成し、データを挿入して、ハイフンより前の部分だけを取得する手順を解説します。 1. サンプルテーブルの作成 まず、以下のコマンドでサンプル用のテーブルを作成します。 mysql> create table DemoTable1857 ( Name varchar(20) ); Query OK, 0 rows affected (0.00 sec) 2. テストデータの挿入 次に、I