Syntax: REGEXP ใน WHERE Clause
SELECT yourColumnName FROM yourTableName
WHERE yourColumnName REGEXP '^yourValue';
ตัวอย่าง: หาชื่อขึ้นต้นด้วย 'Jo'
mysql> CREATE TABLE DemoTable1892 (FirstName VARCHAR(20));
mysql> INSERT INTO DemoTable1892 VALUES
('John'), ('Adam'), ('Jace'), ('Johny'), ('Johnson'), ('Jack');
Regex Query
mysql> SELECT FirstName FROM DemoTable1892
WHERE FirstName REGEXP '^Jo';
ผลลัพธ์:
+-----------+
| FirstName |
+-----------+
| John |
| Johny |
| Johnson |
+-----------+
Regex Patterns ที่น่าสนใจ
| Pattern | ความหมาย | ตัวอย่าง Match |
^Jo | ขึ้นต้นด้วย Jo | John, Johny, Johnson |
son$ | ลงท้ายด้วย son | Johnson, Jackson |
^J.*n$ | ขึ้นต้น J จบ n | John, Jason, Julian |
[aeiou] | มีสระอย่างน้อย 1 ตัว | John, Adam |
[0-9] | มีตัวเลข | John123 |
^[A-Z][a-z]+$ | ตัวแรกใหญ่ ต่อมาน้อย | John, David |
REGEXP vs LIKE
| คุณสมบัติ | LIKE | REGEXP |
| Pattern | Simple Wildcard (% _) | Full Regex (POSIX) |
| Performance | เร็วกว่า | ช้ากว่า |
| Index | ใช้ได้ (Prefix Only) | ไม่ใช้ Index |
| Case Sensitive | Up to Collation | Default: Insensitive |
MySQL 8.0+ New Functions
-- Extract matched substring
REGEXP_SUBSTR(col, 'pattern')
-- Replace matched
REGEXP_REPLACE(col, 'pattern', 'replacement')
-- Check match (Boolean)
col REGEXP 'pattern' -- หรือ REGEXP_LIKE(col, 'pattern')
Case Sensitive Regex
-- BINARY Keyword
WHERE FirstName REGEXP BINARY '^jo' -- ไม่ match 'John'
-- หรือ Collation
WHERE FirstName COLLATE utf8mb4_bin REGEXP '^jo'