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

ใช้ Regex Match ใน MySQL SELECT Statement

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ขึ้นต้นด้วย JoJohn, Johny, Johnson
son$ลงท้ายด้วย sonJohnson, Jackson
^J.*n$ขึ้นต้น J จบ nJohn, Jason, Julian
[aeiou]มีสระอย่างน้อย 1 ตัวJohn, Adam
[0-9]มีตัวเลขJohn123
^[A-Z][a-z]+$ตัวแรกใหญ่ ต่อมาน้อยJohn, David

REGEXP vs LIKE

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'
คุณสมบัติLIKEREGEXP
PatternSimple Wildcard (% _)Full Regex (POSIX)
Performanceเร็วกว่าช้ากว่า
Indexใช้ได้ (Prefix Only)ไม่ใช้ Index
Case SensitiveUp to CollationDefault: Insensitive