การค้นหาข้อมูลที่มีอักขระพิเศษด้วย Regular Expression
ใช้ REGEXP (หรือ RLIKE) พร้อม Pattern [^a-zA-Z0-9] เพื่อค้นหาแถวที่มีอักขระนอกเหนือจากตัวอักษรอังกฤษและตัวเลข (Special Characters)
ไวยากรณ์ (Syntax)
SELECT * FROM yourTableName WHERE yourColumnName REGEXP '[^a-zA-Z0-9]';
ตัวอย่างการใช้งาน
สร้างตารางและเพิ่มข้อมูลรหัสนักศึกษา:
mysql> CREATE TABLE specialCharactersDemo (
-> StudentId VARCHAR(100)
-> );
Query OK, 0 rows affected (0.58 sec)
mysql> INSERT INTO specialCharactersDemo VALUES('STU_1234');
Query OK, 1 row affected (0.15 sec)
mysql> INSERT INTO specialCharactersDemo VALUES('STU567');
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO specialCharactersDemo VALUES('STU#1234');
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO specialCharactersDemo VALUES('STU897$');
Query OK, 1 row affected (0.18 sec)
mysql> INSERT INTO specialCharactersDemo VALUES('STU999');
Query OK, 1 row affected (0.43 sec)
mysql> INSERT INTO specialCharactersDemo VALUES('STU1010');
Query OK, 1 row affected (0.14 sec)
ข้อมูลทั้งหมด:
mysql> SELECT * FROM specialCharactersDemo;
+-----------+
| StudentId |
+-----------+
| STU_1234 |
| STU567 |
| STU#1234 |
| STU897$ |
| STU999 |
| STU1010 |
+-----------+
6 rows in set (0.00 sec)
ค้นหาที่มีอักขระพิเศษ (Pattern แบบ Negated Character Class):
mysql> SELECT * FROM specialCharactersDemo
-> WHERE StudentId REGEXP '[^a-zA-Z0-9]';
ผลลัพธ์ (พบ _ , # , $):
+-----------+
| StudentId |
+-----------+
| STU_1234 |
| STU#1234 |
| STU897$ |
+-----------+
3 rows in set (0.02 sec)
Pattern ทางเลือก: POSIX Character Class
ใช้ [^[:alnum:]] แทนได้ (alnum = alphanumeric = a-zA-Z0-9):
mysql> SELECT * FROM specialCharactersDemo
-> WHERE StudentId REGEXP '[^[:alnum:]]';
ผลลัพธ์เหมือนกัน
คำอธิบาย Pattern
[...]Character Class: ตรงกับอักขระใดอักขระหนึ่งในชุด^ภายใน [] = Negation (ไม่ใช่อักขระเหล่านี้)a-zA-Z0-9= ตัวอักษรอังกฤษเล็ก/ใหญ่ และตัวเลข 0-9[:alnum:]= POSIX shorthand สำหรับ a-zA-Z0-9
ประยุกต์ใช้: เปลี่ยน Pattern ได้ตามต้องการ เช่น [^0-9] (หาไม่ใช่ตัวเลข), [^a-zA-Z] (หาไม่ใช่ตัวอักษร), [^a-zA-Z0-9_] (หา Special Char ยกเว้น Underscore)