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

MySQLでテーブルの列の値から部分文字列を抽出する方法(SUBSTRING・MID・SUBSTR)

MySQLでは、SUBSTRING()MID()SUBSTR() のいずれかの関数を使用することで、テーブルの列の値から部分文字列を抽出できます。これら3つの関数は機能的に同一であり、どれを使っても同じ結果が得られます。

ポイントは、関数の第1引数に通常の文字列リテラルではなく列名を指定する点です。構文は次のようになります。

SUBSTRING(列名, 開始位置, 抽出する文字数)
  • 第1引数:対象となる文字列または列名
  • 第2引数:抽出を開始する位置(先頭の文字は1番目として数えます)
  • 第3引数:抽出する文字数(省略した場合は開始位置から末尾まで)

使用例

ここでは、「Student」テーブルの「name」列から部分文字列を抽出する例を紹介します。3つの関数それぞれで、2文字目から4文字分を取り出しています。

SUBSTR() を使った場合

mysql> Select name, SUBSTR(name,2,4) from student;
+---------+------------------+
| name    | SUBSTR(name,2,4) |
+---------+------------------+
| Gaurav  | aura             |
| Aarav   | arav             |
| Harshit | arsh             |
| Gaurav  | aura             |
| Yashraj | ashr             |
+---------+------------------+
5 rows in set (0.00 sec)

MID() を使った場合

mysql> Select name, MID(name,2,4) from student;
+---------+---------------+
| name    | MID(name,2,4) |
+---------+---------------+
| Gaurav  | aura          |
| Aarav   | arav          |
| Harshit | arsh          |
| Gaurav  | aura          |
| Yashraj | ashr          |
+---------+---------------+
5 rows in set (0.00 sec)

SUBSTRING() を使った場合

mysql> Select name, substring(name,2,4) from student;
+---------+---------------------+
| name    | substring(name,2,4) |
+---------+---------------------+
| Gaurav  | aura                |
| Aarav   | arav                |
| Harshit | arsh                |
| Gaurav  | aura                |
| Yashraj | ashr                |
+---------+---------------------+
5 rows in set (0.00 sec)

いずれの関数でも、名前の2文字目から4文字(例:「Gaurav」なら「aura」)が抽出されていることがわかります。

WHERE句と組み合わせた条件付き抽出

これらの関数は、WHERE 句による条件指定と組み合わせることも可能です。たとえば、住所が「delhi」である行だけを対象に部分文字列を抽出する場合は、次のように記述します。

mysql> Select name, substring(name,2,4) from student WHERE address = 'delhi';
+---------+---------------------+
| name    | substring(name,2,4) |
+---------+---------------------+
| Gaurav  | aura                |
| Harshit | arsh                |
+---------+---------------------+
2 rows in set (0.16 sec)

mysql> Select name, MID(name,2,4) from student WHERE address = 'delhi';
+---------+---------------+
| name    | MID(name,2,4) |
+---------+---------------+
| Gaurav  | aura          |
| Harshit | arsh          |
+---------+---------------+
2 rows in set (0.00 sec)

mysql> Select name, SUBSTR(name,2,4) from student WHERE address = 'delhi';
+---------+------------------+
| name    | SUBSTR(name,2,4) |
+---------+------------------+
| Gaurav  | aura             |
| Harshit | arsh             |
+---------+------------------+
2 rows in set (0.00 sec)

このように、条件に一致する行のみが返され、その列の値から指定した範囲の部分文字列が抽出されます。SUBSTRING()MID()SUBSTR() はすべて標準SQLの一部として広くサポートされており、用途に応じて好みのものを選択して使用できます。

  1. MySQLでテーブルの列名とデータ型を抽出する方法

    MySQLでテーブルに含まれる列名(カラム名)とそのデータ型を一覧として取得したい場合は、INFORMATION_SCHEMA.COLUMNS テーブルを利用するのが便利です。この方法を使えば、SQLを1つ実行するだけで、指定したデータベース・テーブル内のすべての列の情報を簡単に抽出できます。INFORMATION_SCHEMA.COLUMNSとはINFORMATION_SCHEMA.COLUMNS は、MySQLサーバーが管理しているメタデータ(スキーマ情報)を格納するシステムビューの一つです。データベース名(table_schema)やテーブル名(table_name)、列名(column

  2. MySQLで予約語「from」を列名として使用する方法

    MySQLで「from」を列名として使うには? MySQLでは「from」は予約語(リザーブドワード)として登録されているため、そのまま列名として使用するとエラーが発生します。しかし、バッククォート(`` ` ``)で囲むことで、予約語である「from」を列名として扱うことができます。 この記事では、実際にテーブルを作成し、「from」を列名としてデータの挿入や取得を行う手順を解説します。 1. バッククォートを使ってテーブルを作成する まず、列名「from」をバッククォートで囲んでテーブルを作成します。以下のSQLを実行してください。 mysql> create table Demo