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

MySQL REGEXP: ดึงข้อมูล String+Number ที่ขึ้นต้นด้วยตัวเลขเฉพาะ

สถานการณ์: ค่าผสม "John500", "John6500" ต้องการที่ขึ้นต้นด้วย 5 หรือ 6

ไวยากรณ์ REGEXP

SELECT column FROM table
WHERE column REGEXP '^prefix[56]';

ตัวอย่าง: ตาราง demo45

CREATE TABLE demo45 (
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    value VARCHAR(50)
);

INSERT INTO demo45 (value) VALUES
('John500'), ('John1500'), ('John5500'), ('John6500'), ('John8600');

ข้อมูล

+----+----------+
| id | value    |
+----+----------+
| 1  | John500  |
| 2  | John1500 |
| 3  | John5500 |
| 4  | John6500 |
| 5  | John8600 |
+----+----------+

คำสั่ง: ดึงที่ขึ้นต้นด้วย John ตามด้วย 5 หรือ 6

SELECT id, value FROM demo45
WHERE value REGEXP '^John[56]';

ผลลัพธ์ (id 1, 3, 4)

+----+----------+
| id | value    |
+----+----------+
| 1  | John500  |
| 3  | John5500 |
| 4  | John6500 |
+----+----------+

อธิบาย Regex Pattern

ส่วนความหมาย
^เริ่มต้นสตริง (Anchor)
Johnตัวอักษร "John" ตรงตัว
[56]Character class: ตัวเลข 5 หรือ 6

รูปแบบ Regex เพิ่มเติม

PatternMatchไม่ Match
^John[56]John500, John6500John1500, John8600
^John[56][0-9]*John500, John6500, John5John5a, John6b
^John(5|6)[0-9]*เหมือนข้างบน (Group)เหมือนข้างบน
^John[0-9]{3}$John500, John999John50, John5000
^John[56].*John5..., John6...John1..., John7...

Case Sensitivity

  • Default: Case-insensitive (ขึ้นกับ collation _ci)
  • Case-sensitive: REGEXP BINARY '^John[56]' หรือ collation utf8mb4_bin

ประสิทธิภาพ

  • REGEXP ไม่ใช้ INDEX → Full table scan
  • ตารางใหญ่: เพิ่มคอลัมน์ prefix แยก (เช่น prefix VARCHAR(10)) และ INDEX แทน
  • MySQL 8.0: ใช้ REGEXP_LIKE() (synonym) ได้