Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

MySQL: ค้นหาสตริงที่มีอักขระพิเศษด้วย REGEXP

การค้นหาข้อมูลที่มีอักขระพิเศษด้วย 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)