ใช้ REGEXP เพื่อค้นหาสตริงที่มีอักขระเฉพาะปรากฏตามลำดับ (ไม่จำเป็นต้องติดกัน)
สร้างตารางตัวอย่าง
mysql> create table DemoTable (
Value varchar(50) );
Query OK, 0 rows affected (3.92 sec)
เพิ่มข้อมูลตัวอย่าง
mysql> insert into DemoTable values('XYSJGHAKLMVDFFSA'); Query OK, 1 row affected (0.67 sec)
mysql> insert into DemoTable values('PQRSTJAVAL'); Query OK, 1 row affected (0.58 sec)
mysql> insert into DemoTable values('SJATUVAK'); Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('JSTUVA'); Query OK, 1 row affected (0.32 sec)
แสดงข้อมูลทั้งหมด
mysql> select *from DemoTable;
+------------------+ | Value | +------------------+ | XYSJGHAKLMVDFFSA | | PQRSTJAVAL | | SJATUVAK | | JSTUVA | +------------------+ 4 rows in set (0.00 sec)
คิวรี่ค้นหาสตริงที่มี J, A, V, A ตามลำดับ
mysql> select *from DemoTable where Value REGEXP '.*J.*A.*V.*A';
ผลลัพธ์ (3 แถวแรกมี J-A-V-A ตามลำดับ):
+------------------+ | Value | +------------------+ | XYSJGHAKLMVDFFSA | | PQRSTJAVAL | | SJATUVAK | +------------------+ 3 rows in set (0.00 sec)
คำอธิบาย Regular Expression
.*- ตัวอักษรใดๆ 0 หรือมาก ตัวJ.*A.*V.*A- มี J ตามด้วย A ตามด้วย V ตามด้วย A (ไม่ต้องติดกัน)- MySQL ใช้ POSIX Regular Expression
REGEXP vs LIKE
| คุณสมบัติ | LIKE | REGEXP |
|---|---|---|
| Pattern matching | Simple wildcard | Full regex |
| Performance | เร็วกว่า | ช้ากว่า |
| Index usage | ใช้ได้ (prefix only) | ไม่ใช้ Index |
| Case sensitive | ขึ้นกับ Collation | ขึ้นกับ Collation |
ตัวอย่าง REGEXP เพิ่มเติม
REGEXP '^[0-9]+$'- เป็นตัวเลขอย่างเดียวREGEXP '^[A-Za-z]+$'- เป็นตัวอักษรอย่างเดียวREGEXP '[[:space:]]'- มี whitespace