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

วิธีค้นหาข้อมูลด้วย Regular Expression (REGEXP) ใน MySQL

การค้นหาตามรูปแบบ (Pattern Matching) ด้วย REGEXP

MySQL รองรับ Regular Expression ผ่านออปอเรเตอร์ REGEXP (หรือ RLIKE) เพื่อค้นหาแถวที่ค่าคอลัมน์ตรงกับรูปแบบที่กำหนด

ตัวอย่างสร้างตารางและข้อมูล

CREATE TABLE DemoTable (
    UserId VARCHAR(100)
);

INSERT INTO DemoTable VALUES
('User-123-G'),
('Us-453-GO'),
('TRUE-908-K');

ข้อมูลในตาราง

+------------+
| UserId     |
+------------+
| User-123-G |
| Us-453-GO  |
| TRUE-908-K |
+------------+
3 rows in set (0.00 sec)

คำสั่งค้นหารูปแบบ: 4 ตัวอักษร/ตัวเลข - 3 ตัวอักษร/ตัวเลข - 1 ตัวอักษร/ตัวเลข

SELECT * FROM DemoTable
WHERE UserId REGEXP '^[[:alnum:]]{4}-[[:alnum:]]{3}-[[:alnum:]]{1}$';

ผลลัพธ์: ตรงกับ User-123-G และ TRUE-908-K

+------------+
| UserId     |
+------------+
| User-123-G |
| TRUE-908-K |
+------------+
2 rows in set (0.12 sec)

คำอธิบาย Regular Expression:

  • ^ เริ่มต้นสตริง
  • [[:alnum:]]{4} ตัวอักษรหรือตัวเลข 4 ตัวติดกัน
  • - ตัวอักษร hyphen ตรงตัว
  • [[:alnum:]]{3} ตัวอักษรหรือตัวเลข 3 ตัว
  • - hyphen อีกตัว
  • [[:alnum:]]{1} ตัวอักษรหรือตัวเลข 1 ตัว
  • $ จบสตริง

รูปแบบ Character Class อื่นๆ:

  • [[:digit:]] หรือ [0-9] ตัวเลข 0-9
  • [[:alpha:]] หรือ [a-zA-Z] ตัวอักษร
  • [[:lower:]], [[:upper:]] ตัวพิมพ์เล็ก/ใหญ่
  • . ตัวอักษรใดๆ (ยกเว้น newline)
  • * + ? {n} {n,} {n,m} Quantifiers

⚠ หมายเหตุ: MySQL 8.0 ใช้ ICU Regex library (รองรับ Unicode ดีกว่า) แทน Henry Spencer Regex ในเวอร์ชันเก่า