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

MySQLでメールアドレスからドメイン名を抽出する方法

メールアドレスからドメイン名を抽出したい場合、MySQLの組み込み関数である SUBSTRING_INDEX() を活用することで簡単に実現できます。本記事では、実際にテーブルを作成しながら、具体的な手順とクエリの仕組みを詳しく解説します。

サンプルテーブルの作成

まずは動作を確認するためのテーブルを作成しましょう。以下がテーブル作成用のクエリです。

mysql> create table selectDomainNameOnly
-> (
-> UserEmailAddress varchar(200)
-> );
Query OK, 0 rows affected (0.52 sec)

レコードの挿入

次に、INSERT文を使ってメールアドレスのデータを登録します。ここでは、ドメイン名を取り出す対象となるメールアドレスを3件挿入します。

mysql> insert into selectDomainNameOnly values('John123@yahoo.com');
Query OK, 1 row affected (0.10 sec)
mysql> insert into selectDomainNameOnly values('234Bob@gmail.com');
Query OK, 1 row affected (0.24 sec)
mysql> insert into selectDomainNameOnly values('Carol23595@hotmail.com');
Query OK, 1 row affected (0.16 sec)

登録データの確認

SELECT文を使って、テーブル内の全レコードを表示してみましょう。

mysql> select *from selectDomainNameOnly;

実行結果は以下の通りです。

+------------------------+
| UserEmailAddress |
+------------------------+
| John123@yahoo.com |
| 234Bob@gmail.com |
| Carol23595@hotmail.com |
+------------------------+
3 rows in set (0.00 sec)

ドメイン名だけを抽出するクエリ

いよいよ、メールアドレスからドメイン名のみを取り出すクエリを実行します。

mysql> select (SUBSTRING_INDEX(SUBSTR(UserEmailAddress, INSTR(UserEmailAddress, '@') + 1),'.',1)) as DomainName from selectDomainNameOnly;

実行結果:

+------------+
| DomainName |
+------------+
| yahoo |
| gmail |
| hotmail |
+------------+
3 rows in set (0.06 sec)

クエリの仕組み解説

このクエリがどのように動作しているのか、順を追って見ていきましょう。

  • INSTR(UserEmailAddress, '@'):メールアドレスの中で「@」記号が最初に出現する位置(文字数)を返します。
  • SUBSTR(…, INSTR(…) + 1):「@」の次の文字から文字列の末尾までを切り出します。これにより「yahoo.com」のような部分が取得されます。
  • SUBSTRING_INDEX(…, '.', 1):切り出した文字列から、最初の「.」より前の部分(つまり「yahoo」「gmail」「hotmail」)を返します。

なお、TLD(トップレベルドメイン)も含めて「yahoo.com」のようにドメイン全体を取得したい場合は、最後のSUBSTRING_INDEX()を省略し、SUBSTR(UserEmailAddress, INSTR(UserEmailAddress, '@') + 1) だけでも十分です。用途に応じて使い分けると便利でしょう。

  1. MySQLで再帰的なSELECTクエリを実行する方法【初心者向けに具体例つきで解説】

    MySQLでは、ユーザー定義変数(セッション変数)を活用することで、再帰的なSELECTクエリを実現できます。本記事では、実際にテーブルを作成し、データを挿入したうえで、再帰的なSELECTの具体的な書き方を順を追って解説します。 1. サンプルテーブルの作成 まず、再帰的なSELECTを試すためのサンプルテーブルを作成します。テーブルの作成にはCREATEコマンドを使用します。 mysql> CREATE table tblSelectDemo - > ( - > id int, - > name varchar(100) - > );

  2. MySQLでテーブルの最後の10件のレコードを取得する方法

    MySQLでテーブルの末尾にある10行(最新の10件)を取得したい場合は、SELECT文とLIMIT句を組み合わせたサブクエリを利用します。この記事では、実際にテーブルを作成し、データを挿入しながら、最後の10件を取得するクエリの手順を具体的に解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成します。 mysql> create table Last10RecordsDemo -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected