ไวยากรณ์ REGEXP
SELECT column FROM table WHERE column REGEXP '[a-zA-Z]';
ตัวอย่าง: ตารางชื่อ
CREATE TABLE demo41 (name VARCHAR(40));
INSERT INTO demo41 VALUES
('John Smith34'), ('John Smith'), ('9234John Smith'),
('john smith'), ('98775');
ข้อมูลทั้งหมด
+----------------+ | name | +----------------+ | John Smith34 | | John Smith | | 9234John Smith | | john smith | | 98775 | +----------------+
คำสั่งกรอง: มีตัวอักษร A-Z หรือ a-z อย่างน้อย 1 ตัว
SELECT name FROM demo41 WHERE name REGEXP '[a-zA-Z]';
ผลลัพธ์: ข้าม '98775' (ตัวเลขอย่างเดียว)
+----------------+ | name | +----------------+ | John Smith34 | | John Smith | | 9234John Smith | | john smith | +----------------+
รูปแบบ REGEXP ที่ใช้บ่อย
| รูปแบบ | ความหมาย | ตัวอย่าง match |
|---|---|---|
[a-zA-Z] | มีตัวอักษรอังกฤษอย่างน้อย 1 ตัว | 'A1', '1a', 'abc' |
^[a-zA-Z] | ขึ้นต้นด้วยตัวอักษร | 'John', 'A123' |
[0-9] | มีตัวเลขอย่างน้อย 1 ตัว | 'A1', '123' |
^[0-9]+$ | เป็นตัวเลขอย่างเดียว (ทั้งสตริง) | '123', '0' |
[^a-zA-Z0-9] | มีอักขระพิเศษ | 'A-B', '1@2' |
กรณีศึกษา: ข้ามเฉพาะตัวเลขอย่างเดียว
-- วิธี 1: NOT REGEXP เฉพาะตัวเลข SELECT * FROM demo41 WHERE name NOT REGEXP '^[0-9]+$'; -- วิธี 2: REGEXP มีตัวอักษร (เหมือนตัวอย่างหลัก) SELECT * FROM demo41 WHERE name REGEXP '[a-zA-Z]';
หมายเหตุเกี่ยวกับ Collation
- MySQL ใช้ collation ของคอลัมน์/ตารางในการเปรียบเทียบ
- collation แบบ
_ci(case-insensitive) จะจับ 'a' และ 'A' ได้เหมือนกัน - ถ้าต้องการ case-sensitive ใช้
REGEXP BINARYหรือ collation_cs/_bin
ประสิทธิภาพ
REGEXP ไม่ใช้ INDEX ได้ (full table scan) หากตารางใหญ่ ควรพิจารณา:
- เพิ่มคอลัมน์ flag (เช่น
has_letter BOOLEAN) และอัปเดตตอน INSERT/UPDATE - ใช้ Full-Text Search หากค้นหาข้อความจริง