ใช้ RLIKE (หรือ REGEXP) พร้อม Pattern 'word1|word2|word3' เพื่อกรองแถวที่คอลัมน์มีคำใดคำหนึ่งจากหลายคำ (OR Logic)
Syntax
SELECT * FROM table_name WHERE column_name RLIKE 'value1|value2|value3';
ตัวอย่างการใช้งาน
1. สร้างตารางและเพิ่มข้อมูล
mysql> create table DemoTable1935 ( Subject varchar(20) ); Query OK, 0 rows affected (0.00 sec)
mysql> insert into DemoTable1935 values('MySQL'); Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1935 values('Python'); Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1935 values('MongoDB'); Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1935 values('SQL Server'); Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1935 values('PL SQL'); Query OK, 1 row affected (0.00 sec)
ข้อมูลทั้งหมด:
mysql> select * from DemoTable1935;
+------------+ | Subject | +------------+ | MySQL | | Python | | MongoDB | | SQL Server | | PL SQL | +------------+ 5 rows in set (0.00 sec)
2. กรอง Subject ที่มี 'SQL' หรือ 'Python'
mysql> select * from DemoTable1935 where Subject rlike 'SQL|Python';
ผลลัพธ์:
+------------+ | Subject | +------------+ | MySQL | | Python | | SQL Server | | PL SQL | +------------+ 4 rows in set (0.00 sec)
อธิบาย Pattern 'SQL|Python'
|= OR operator ใน Regular Expression- จับคู่ 'SQL' หรือ 'Python' ที่ตำแหน่งไหนในสตริงก็ได้
- Case-insensitive โดยค่าเริ่มต้น (MySQL default collation)
RLIKE vs LIKE vs REGEXP
| Operator | Pattern | ใช้เมื่อ |
|---|---|---|
| LIKE | %SQL% | Pattern 简单, Wildcard % _ |
| RLIKE / REGEXP | SQL|Python | Multiple patterns, Complex regex |
ตัวอย่าง Pattern เพิ่มเติม
-- เริ่มต้นด้วย SQL หรือ Python WHERE Subject RLIKE '^(SQL|Python)' -- จบด้วย SQL WHERE Subject RLIKE 'SQL$' -- คำเต็ม Word Boundary WHERE Subject RLIKE '[[:<:]]SQL[[:>:]]' -- MySQL 8.0: \bSQL\b -- Case Sensitive WHERE Subject RLIKE BINARY 'SQL|Python'
สรุป: ใช้ RLIKE 'word1|word2|word3' สำหรับกรอง OR หลายคำใน MySQL รองรับ Regex เต็มรูปแบบ ใช้ BINARY สำหรับ Case-sensitive