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

MySQLでメールアドレスの@より前の部分だけを抽出する方法|SUBSTRING_INDEXの使い方を解説

MySQLでメールアドレスから「@」より前のユーザー名部分だけを取り出したい場合、SUBSTRING_INDEX関数を使うのが最も簡単です。この記事では、実際にテーブルを作成し、データを挿入して、@より前の文字列を抽出する手順をわかりやすく解説します。

基本構文

SUBSTRING_INDEXは、指定した区切り文字が出現するまでの文字列を返す関数です。第3引数に「1」を指定すると、最初に出現する区切り文字より前の部分が取得できます。

SELECT SUBSTRING_INDEX(カラム名, '@', 1) FROM テーブル名;

サンプルテーブルの作成

まず、メールアドレスを格納するテーブルを作成します。

mysql> CREATE TABLE DemoTable
-> (
-> EmployeeMailId VARCHAR(100)
-> );
Query OK, 0 rows affected (0.52 sec)

テストデータの挿入

INSERT文を使って、いくつかのメールアドレスを登録します。

mysql> INSERT INTO DemoTable VALUES('Larry123@gmail.com');
Query OK, 1 row affected (0.16 sec)

mysql> INSERT INTO DemoTable VALUES('987Sam@hotmail.com');
Query OK, 1 row affected (0.13 sec)

mysql> INSERT INTO DemoTable VALUES('123456David_98@gmail.com');
Query OK, 1 row affected (0.20 sec)

登録データの確認

SELECT文ですべてのレコードを表示してみましょう。

mysql> SELECT * FROM DemoTable;

出力結果

+--------------------------+
| EmployeeMailId |
+--------------------------+
| Larry123@gmail.com |
| 987Sam@hotmail.com |
| 123456David_98@gmail.com |
+--------------------------+
3 rows in set (0.00 sec)

@より前の部分を抽出するクエリ

それでは、SUBSTRING_INDEXを使って「@」より前の文字列を抽出します。

mysql> SELECT SUBSTRING_INDEX(EmployeeMailId, '@', 1) FROM DemoTable;

出力結果

+-----------------------------------------+
| SUBSTRING_INDEX(EmployeeMailId, '@', 1) |
+-----------------------------------------+
| Larry123 |
| 987Sam |
| 123456David_98 |
+-----------------------------------------+
3 rows in set (0.00 sec)

補足:抽出結果に別名をつける

そのまま実行するとカラム名が関数名になってしまうため、AS句で別名を付けると見やすくなります。

mysql> SELECT SUBSTRING_INDEX(EmployeeMailId, '@', 1) AS UserName FROM DemoTable;

まとめ

  • SUBSTRING_INDEX(カラム名, '@', 1) で、@より前の文字列を取得できる
  • 第3引数を -1 にすると、逆に@より後ろのドメイン部分を取得できる
  • AS句を使えば、出力時のカラム名も自由に指定可能

SUBSTRING_INDEXは区切り文字ベースで文字列を分割できる便利な関数なので、メールアドレス以外にもURLやCSV形式のデータ処理など、さまざまな場面で活用できます。

  1. MySQLのSELECT *で重複しないID(一意な値)を取得する方法

    MySQLでテーブルから全カラム(SELECT *)を取得しつつ、特定のカラムの重複を排除して一意なIDだけを取り出したい場合があります。そんなときはGROUP BY句を使うことで実現できます。基本構文SELECT * FROM テーブル名 GROUP BY カラム名;指定したカラムの値ごとにレコードがグループ化され、各グループから1行ずつ結果として返されます。その結果、重複したIDを持つ行は1行にまとめられます。サンプルテーブルの作成実際に動きを確認するため、テーブルを作成してみましょう。mysql> create table DistinctIdDemo -> (

  2. JavaでMySQLのSELECTクエリにPreparedStatement(プリペアドステートメント)を使う方法

    executeQuery()メソッドの基本的な使い方JavaからMySQLに対してSELECTクエリを実行する場合は、PreparedStatementオブジェクトのexecuteQuery()メソッドを使用します。基本構文は以下の通りです。yourPreparedStatementObject = yourConnectionObject.prepareStatement(yourQueryName);yourResultSetObject = yourPreparedStatementObject.executeQuery();それでは、実際にサンプルデータベース「sample」を使って手