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の一部として広くサポートされており、用途に応じて好みのものを選択して使用できます。
-
MySQLでテーブルの列名とデータ型を抽出する方法
MySQLでテーブルに含まれる列名(カラム名)とそのデータ型を一覧として取得したい場合は、INFORMATION_SCHEMA.COLUMNS テーブルを利用するのが便利です。この方法を使えば、SQLを1つ実行するだけで、指定したデータベース・テーブル内のすべての列の情報を簡単に抽出できます。INFORMATION_SCHEMA.COLUMNSとはINFORMATION_SCHEMA.COLUMNS は、MySQLサーバーが管理しているメタデータ(スキーマ情報)を格納するシステムビューの一つです。データベース名(table_schema)やテーブル名(table_name)、列名(column
-
MySQLで予約語「from」を列名として使用する方法
MySQLで「from」を列名として使うには? MySQLでは「from」は予約語(リザーブドワード)として登録されているため、そのまま列名として使用するとエラーが発生します。しかし、バッククォート(`` ` ``)で囲むことで、予約語である「from」を列名として扱うことができます。 この記事では、実際にテーブルを作成し、「from」を列名としてデータの挿入や取得を行う手順を解説します。 1. バッククォートを使ってテーブルを作成する まず、列名「from」をバッククォートで囲んでテーブルを作成します。以下のSQLを実行してください。 mysql> create table Demo