Để lấy phần tên miền (domain) từ địa chỉ email (ví dụ: từ user@gmail.com lấy gmail), MySQL cung cấp hàm SUBSTRING_INDEX() rất tiện lợi. Hàm này trả về chuỗi con trước hoặc sau lần xuất hiện thứ N của một ký tự phân tách.
Tạo bảng và chèn dữ liệu email
mysql> CREATE TABLE DemoTable (
UserId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
UserMailId VARCHAR(200)
);
mysql> INSERT INTO DemoTable (UserMailId) VALUES
('John9989@facebook.com'),
('983773CS@yahoo.com'),
('Chris95@gmail.com');
Xem dữ liệu
mysql> SELECT * FROM DemoTable;
+--------+-----------------------+
| UserId | UserMailId |
+--------+-----------------------+
| 1 | John9989@facebook.com |
| 2 | 983773CS@yahoo.com |
| 3 | Chris95@gmail.com |
+--------+-----------------------+
Truy vấn trích xuất tên miền
Sử dụng SUBSTRING_INDEX lồng nhau: lần đầu tách lấy phần sau @, lần hai tách lấy phần trước dấu chấm . đầu tiên.
mysql> SELECT UserId, UserMailId,
SUBSTRING_INDEX(SUBSTRING_INDEX(UserMailId, '@', -1), '.', 1) AS Domain_Name
FROM DemoTable;
Kết quả
+--------+-----------------------+-------------+
| UserId | UserMailId | Domain_Name |
+--------+-----------------------+-------------+
| 1 | John9989@facebook.com | facebook |
| 2 | 983773CS@yahoo.com | yahoo |
| 3 | Chris95@gmail.com | gmail |
+--------+-----------------------+-------------+
Giải thích
SUBSTRING_INDEX(UserMailId, '@', -1): Lấy chuỗi con sau ký tự@cuối cùng (phần domain + TLD).SUBSTRING_INDEX(..., '.', 1): Từ kết quả trên, lấy chuỗi con trước dấu chấm.đầu tiên (chỉ lấy tên miền, bỏ phần mở rộng như .com, .net).
Cách này hiệu quả, không cần biểu thức chính quy phức tạp.