ใช้ SUBSTRING_INDEX() และ INSTR() แยก Domain
หาตำแหน่ง @ ก่อน แล้วดึงส่วนหลัง @ จนถึง . (dot) แรก
รูปแบบคำสั่ง
SELECT SUBSTRING_INDEX(
SUBSTR(email, INSTR(email, '@') + 1),
'.', 1
) AS DomainName FROM yourTableName;
ตัวอย่างสร้างตารางและข้อมูล
mysql> CREATE TABLE selectDomainNameOnly (
-> UserEmailAddress VARCHAR(200)
-> );
Query OK, 0 rows affected (0.52 sec)
mysql> INSERT INTO selectDomainNameOnly VALUES('John123@yahoo.com');
mysql> INSERT INTO selectDomainNameOnly VALUES('234Bob@gmail.com');
mysql> INSERT INTO selectDomainNameOnly VALUES('Carol23595@hotmail.com');
ข้อมูลทั้งหมด
mysql> SELECT * FROM selectDomainNameOnly;
+------------------------+ | UserEmailAddress | +------------------------+ | John123@yahoo.com | | 234Bob@gmail.com | | Carol23595@hotmail.com | +------------------------+ 3 rows in set (0.00 sec)
คำสั่งดึง Domain Name (ส่วนระหว่าง @ และ .)
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(email, '@')- หาตำแหน่งของ @SUBSTR(email, pos + 1)- ดึงข้อความหลัง @ (เช่น yahoo.com)SUBSTRING_INDEX(str, '.', 1)- ดึงส่วนก่อน . ตัวแรก (เช่น yahoo)
รูปแบบอื่นที่ง่ายกว่า (MySQL 8.0+):
-- ใช้ REGEXP_SUBSTR (ต้อง MySQL 8.0) SELECT REGEXP_SUBSTR(email, '@([^.]+)') AS domain; -- หรือแค่ดึงส่วนหลัง @ (รวม .com) SELECT SUBSTRING_INDEX(email, '@', -1) AS domain_with_tld;
กรณี email ซับซ้อน (subdomain): user@mail.company.co.uk → ต้องใช้ logic ที่ซับซ้อนกว่า