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) だけでも十分です。用途に応じて使い分けると便利でしょう。
-
MySQLで再帰的なSELECTクエリを実行する方法【初心者向けに具体例つきで解説】
MySQLでは、ユーザー定義変数(セッション変数)を活用することで、再帰的なSELECTクエリを実現できます。本記事では、実際にテーブルを作成し、データを挿入したうえで、再帰的なSELECTの具体的な書き方を順を追って解説します。 1. サンプルテーブルの作成 まず、再帰的なSELECTを試すためのサンプルテーブルを作成します。テーブルの作成にはCREATEコマンドを使用します。 mysql> CREATE table tblSelectDemo - > ( - > id int, - > name varchar(100) - > );
-
MySQLでテーブルの最後の10件のレコードを取得する方法
MySQLでテーブルの末尾にある10行(最新の10件)を取得したい場合は、SELECT文とLIMIT句を組み合わせたサブクエリを利用します。この記事では、実際にテーブルを作成し、データを挿入しながら、最後の10件を取得するクエリの手順を具体的に解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成します。 mysql> create table Last10RecordsDemo -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected