เมื่อต้องการค้นหาเรคคอร์ดที่คอลัมน์สตริงลงท้ายด้วยค่าเฉพาะ (Suffix Search) ให้ใช้ตัวอักษร Universal % (Wildcard) หน้าค่าที่ต้องการค้นหาในคำสั่ง LIKE
สร้างตารางและข้อมูล ClientId
mysql> create table DemoTable (ClientId varchar(20));
mysql> insert into DemoTable values('CLI-101'),('CLI-110'),('CLI-201'),('CLI-210'),('CLI-502'),('CLI-1010'),('CLI-1012');
ข้อมูลในตาราง
+----------+ | ClientId | +----------+ | CLI-101 | | CLI-110 | | CLI-201 | | CLI-210 | | CLI-502 | | CLI-1010 | | CLI-1012 | +----------+
ค้นหาลงท้ายด้วย 10 หรือ 12
mysql> select * from DemoTable where ClientId like '%10' or ClientId like '%12';
ผลลัพธ์
+----------+ | ClientId | +----------+ | CLI-110 | | CLI-210 | | CLI-1010 | | CLI-1012 | +----------+
รูปแบบ Wildcard
| Pattern | ความหมาย | ตัวอย่าง Match |
|---|---|---|
%10 | ลงท้ายด้วย 10 | 110, 1010, 210 |
10% | ขึ้นต้นด้วย 10 | 10, 101, 100 |
%10% | มี 10 อยู่กลาง | 110, 101, 9102 |
_10 | ลงท้าย 10 ความยาว 3 ตัว | 110, 210 (ไม่ใช่ 1010) |
ประสิทธิภาพและ Index
LIKE 'prefix%'- ใช้ Index ได้ (Prefix Index)LIKE '%suffix'- ไม่ใช้ Index (Full Table Scan)LIKE '%middle%'- ไม่ใช้ Index
ทางเลือกที่ดีกว่าสำหรับ Suffix Search
- Reverse Index - สร้างคอลัมน์เก็บสตริงกลับ (REVERSE) แล้ว Index แบบ Prefix
- Fulltext Search - สำหรับข้อความยาว
- Generated Column - MySQL 5.7+ สร้างคอลัมน์คำนวณ REVERSE แล้ว Index
RIGHT(ClientId, 2) = '10'- อ่านง่ายกว่า LIKE แต่ไม่ใช้ Index
ตัวอย่าง Generated Column สำหรับ Suffix Search
ALTER TABLE DemoTable ADD COLUMN ClientId_Reversed VARCHAR(20) GENERATED ALWAYS AS (REVERSE(ClientId)) STORED; CREATE INDEX idx_reversed ON DemoTable(ClientId_Reversed); -- ค้นหา: WHERE ClientId_Reversed LIKE '01%' (01 = 10 กลับ) SELECT * FROM DemoTable WHERE ClientId_Reversed LIKE '01%';