สามารถค้นหาอีเมลที่มีรูปแบบไม่ถูกต้องใน MySQL ได้โดยใช้เงื่อนไข NOT LIKE กับรูปแบบพื้นฐานของอีเมล แม้จะไม่ครอบคลุมทุกกรณีตามมาตรฐาน RFC แต่เพียงพอสำหรับการกรองเบื้องต้น
รูปแบบคำสั่ง
SELECT email_column
FROM your_table
WHERE email_column NOT LIKE '%_@_%._%';
คำอธิบายรูปแบบ %_@_%._%:
%_- มีตัวอักษรอย่างน้อย 1 ตัวก่อน @@- ต้องมีเครื่องหมาย @_%- มีตัวอักษรอย่างน้อย 1 ตัวหลัง @.- ต้องมีจุด (.)_%- มีตัวอักษรอย่างน้อย 1 ตัวหลังจุด
ตัวอย่างการใช้งาน
สร้างตารางและเพิ่มข้อมูล (มีอีเมลผิดปกติ混入):
CREATE TABLE FindInvalidEmailAddressDemo (
Id INT NOT NULL AUTO_INCREMENT,
Name VARCHAR(20),
EmailAddress VARCHAR(40),
PRIMARY KEY (Id)
);
INSERT INTO FindInvalidEmailAddressDemo (Name, EmailAddress) VALUES
('John', 'John12@gmail.com'),
('Carol', 'Carol@hotmail.com'),
('Mike', '123Mike@gmailcom'), -- ขาดจุด
('Bob', 'Bob909hotmail.com'), -- ขาด @
('David', 'David@gmail.com');
ข้อมูลในตาราง:
+----+-------+-------------------+
| Id | Name | EmailAddress |
+----+-------+-------------------+
| 1 | John | John12@gmail.com |
| 2 | Carol | Carol@hotmail.com |
| 3 | Mike | 123Mike@gmailcom |
| 4 | Bob | Bob909hotmail.com |
| 5 | David | David@gmail.com |
+----+-------+-------------------+
คำสั่งค้นหาอีเมลไม่ถูกต้อง
SELECT EmailAddress
FROM FindInvalidEmailAddressDemo
WHERE EmailAddress NOT LIKE '%_@_%._%';
ผลลัพธ์:
+-------------------+
| EmailAddress |
+-------------------+
| 123Mike@gmailcom |
| Bob909hotmail.com |
+-------------------+
ข้อจำกัดและการปรับปรุง
รูปแบบนี้ยังผ่านอีเมลบางรูปแบบที่ผิดปกติได้ เช่น:
@domain.com(ไม่มีตัวหน้า @)user@.com(ไม่มีโดเมน)user@domain.(ไม่มี TLD)
รูปแบบที่เข้มงวดกว่า (MySQL 8.0+ ใช้ REGEXP)
SELECT EmailAddress
FROM FindInvalidEmailAddressDemo
WHERE EmailAddress NOT REGEXP '^[^@]+@[^@]+\.[^@]+$';
หรือสำหรับการตรวจสอบครบถ้วน ควรทำที่ระดับแอปพลิเคชัน (PHP, Java, v.v.) ด้วย filter_var() หรือ regex ที่ซับซ้อนกว่า