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

การค้นหาอักขระเฉพาะในสตริงด้วย REGEXP ใน MySQL

ใช้ 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

คุณสมบัติLIKEREGEXP
Pattern matchingSimple wildcardFull regex
Performanceเร็วกว่าช้ากว่า
Index usageใช้ได้ (prefix only)ไม่ใช้ Index
Case sensitiveขึ้นกับ Collationขึ้นกับ Collation

ตัวอย่าง REGEXP เพิ่มเติม

  • REGEXP '^[0-9]+$' - เป็นตัวเลขอย่างเดียว
  • REGEXP '^[A-Za-z]+$' - เป็นตัวอักษรอย่างเดียว
  • REGEXP '[[:space:]]' - มี whitespace