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

ค้นหาข้อมูลที่มีอักขระ % (Percent) ใน MySQL ด้วย LIKE และ Escape Character

การค้นหาตัวอักษร % (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 '%\\%%' = หาแถวที่ **ไม่มี** %