การค้นหาตัวอักษร % (Percent Sign) ซึ่งเป็น Wildcard ใน LIKE
ใน LIKE ตัว % หมายถึง "ตัวอักษรใดๆ จำนวนเท่าไรก็ได้" หากต้องการค้นหา % จริง ต้อง **Escape ด้วย Backslash (\\%)**
Syntax
SELECT * FROM table_name WHERE column_name LIKE '%\\%%';
ตัวอย่างการใช้งาน
สร้างตารางและเพิ่มข้อมูลที่มี %:
mysql> CREATE TABLE DemoTable742 (Value VARCHAR(100));
Query OK, 0 rows affected (2.91 sec)
mysql> INSERT INTO DemoTable742 VALUES
('632535MIT'), ('US%UK'), ('56%78'), ('%_1234');
Query OK, 4 rows affected
ข้อมูลทั้งหมด:
mysql> SELECT * FROM DemoTable742;
+-----------+ | Value | +-----------+ | 632535MIT | | US%UK | | 56%78 | | %_1234 | +-----------+ 4 rows in set (0.00 sec)
ค้นหาแถวที่มี % (Escape ด้วย Backslash):
mysql> SELECT * FROM DemoTable742 WHERE Value LIKE '%\\%%';
+--------+ | Value | +--------+ | US%UK | | 56%78 | | %_1234 | +--------+ 3 rows in set (0.00 sec)
632535MIT ไม่มี % → ไม่ถูก Select
Escape Character อื่นๆ
\\_- ค้นหา Underscore (_) จริง (Wildcard = ตัวอักษร 1 ตัว)\\\\- ค้นหา Backslash (\) จริง- กำหนด Escape Char เอง:
LIKE '%\\%%' ESCAPE '\\'(Default คือ Backslash)
ใช้ ESCAPE Clause ระบุตัว Escape เอง
-- ใช้ ! เป็น Escape Char แทน SELECT * FROM DemoTable742 WHERE Value LIKE '%!%%' ESCAPE '!';
REGEXP ทางเลือก (ไม่ต้อง Escape %)
SELECT * FROM DemoTable742 WHERE Value REGEXP '%'; -- % ใน Regex = Literal %
แต่ Regex ช้ากว่า LIKE และไม่ใช้ Index
ข้อควรระวัง
- ใน String Literal ของ SQL ต้อง Double Escape:
'%\\%%'→ MySQL Parser เห็น%\\%→ LIKE Engine เห็น\% - Prepared Statement / Parameterized Query: ส่ง
%ตรงๆ ไม่ต้อง Escape NOT LIKE '%\\%%'= หาแถวที่ **ไม่มี** %