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

MySQLクエリで文字列の一部を切り取る方法【実行例付きで解説】

MySQLクエリで文字列の一部を切り取る方法

MySQLで「STU-1011」のような文字列から、ハイフン(-)より後ろの数字部分だけを取り出したい場合、SUBSTRING_INDEX()関数とINSTR()SUBSTRING()関数を組み合わせることで実現できます。ここでは、実際にテーブルを作成し、データを挿入して動作を確認するまでの手順を順番に解説します。

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

まず、create table文でテーブルを作成します。

mysql> create table DemoTable
   -> (
   -> StudentId varchar(100)
   -> );
Query OK, 0 rows affected (0.60 sec)

2. レコードの挿入

insertコマンドでサンプルデータを登録します。

mysql> insert into DemoTable values('STU-1011');
Query OK, 1 row affected (0.18 sec)

mysql> insert into DemoTable values('STU-95968686');
Query OK, 1 row affected (0.17 sec)

3. データの確認

select文で登録されたレコードを表示します。

mysql> select *from DemoTable;
+--------------+
| StudentId    |
+--------------+
| STU-1011     |
| STU-95968686 |
+--------------+
2 rows in set (0.00 sec)

4. ハイフン以降の文字列を切り取るクエリ

次のクエリでは、INSTR()関数でハイフン(-)の位置を検索し、SUBSTRING()関数でその次の文字以降を抜き出しています。さらにSUBSTRING_INDEX()関数で最初の空白までの部分を取得することで、学籍番号の数字部分のみを取り出せます。

mysql> select substring_index(substring(StudentId, instr(StudentId, '-')+1), ' ', 1) from DemoTable;
+------------------------------------------------------------------------+
| substring_index(substring(StudentId, instr(StudentId, '-')+1), ' ', 1) |
+------------------------------------------------------------------------+
| 1011                                                                   |
| 95968686                                                               |
+------------------------------------------------------------------------+
2 rows in set (0.02 sec)

実行結果を見ると、「STU-1011」からは「1011」、「STU-95968686」からは「95968686」と、ハイフン以降の文字列が正しく切り取られていることがわかります。

補足:SUBSTRING_INDEX()だけでよりシンプルに書く方法

区切り文字が1つだけの場合は、SUBSTRING_INDEX()関数だけで同様の結果が得られます。第3引数に負の値「-1」を指定すると、区切り文字より後ろ側のすべての文字列を取得できます。

mysql> select substring_index(StudentId, '-', -1) from DemoTable;

こちらの方法ならクエリがシンプルになり、可読性も向上します。文字列のパターンや用途に応じて、両者の方法を使い分けるとよいでしょう。

  1. MySQLでドットより前の文字列を一括置換する方法:CONCATとSUBSTRING_INDEXの活用術

    MySQLで、小数点(ドット)より前の部分だけを別の文字列に置き換えたい場面は意外と多くあります。そんなときに役立つのが、CONCAT() 関数と SUBSTRING_INDEX() 関数を組み合わせた方法です。この記事では、実際のテーブルを使いながら手順をわかりやすく解説します。1. テーブルの作成まずはサンプル用のテーブルを作成します。mysql> create table DemoTable1424    -> (    -> Value varchar(60)  &nb

  2. MySQLでカンマ区切りの数値文字列を合計する方法を解説

    MySQLでは、カンマ区切りの数値文字列を合計するためのカスタム関数を自作することができます。本記事では、テーブルの作成から関数の定義、実際の実行まで、手順を追ってわかりやすく解説します。1. テーブルの作成まず、varchar型のカラムを持つテーブルを作成します。このカラムには、数値を文字列の形式(カンマ区切り)で格納していきます。mysql> create table DemoTable  -> (  -> ListOfValues varchar(50)  -> );Query OK, 0 rows affected (0.56 sec)2. テストデータの挿入I