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

วิธีค้นหาสตริงที่มีอักขระพิเศษใน MySQL ด้วย REPLACE และ LIKE

การค้นหาข้อความที่มีอักขระพิเศษ (เช่น Single Quote) ใน MySQL

ใช้ REPLACE() กำจัดอักขระพิเศษชั่วคราว แล้วค่อย LIKE เพื่อค้นหา

ตัวอย่าง: ค้นหา 'MySQL's' (มี single quote)

1. สร้างตารางและเพิ่มข้อมูล

CREATE TABLE DemoTable (Title TEXT);
INSERT INTO DemoTable VALUES ('MySQL'), ('MongoDB\'s'), ('MySQL\'s'), ('Java\'s');

2. ดูข้อมูล

SELECT * FROM DemoTable;

ผลลัพธ์:

+-----------+
| Title     |
+-----------+
| MySQL     |
| MongoDB's |
| MySQL's   |
| Java's    |
+-----------+

3. ค้นหา 'MySQL's' โดยใช้ REPLACE กำจัด Quote ก่อน

SELECT * FROM DemoTable 
WHERE REPLACE(Title, '''', '') LIKE '%MySQLs%';

ผลลัพธ์:

+---------+
| Title   |
+---------+
| MySQL's |
+---------+

อธิบายคำสั่ง

  • REPLACE(Title, '''', ''): แทนที่ Single Quote (') ด้วย Empty String ('') → 'MySQL's' กลายเป็น 'MySQLs'
  • LIKE '%MySQLs%': ค้นหา 'MySQLs' ในผลลัพธ์ที่ Replace แล้ว
  • ใน SQL: Single Quote เขียนเป็น '' (สองอัน) หรือ \'

วิธีอื่น: Escape Single Quote ใน LIKE Pattern

-- ใช้ Backslash Escape (Default)
SELECT * FROM DemoTable WHERE Title LIKE 'MySQL\'s';

-- หรือใช้ ESCAPE clause
SELECT * FROM DemoTable WHERE Title LIKE 'MySQL|'s' ESCAPE '|';

การค้นหาข้อความที่มีอักขระพิเศษอื่นๆ

-- ค้นหาที่มี % (Wildcard ตรงตัว)
WHERE Title LIKE '%\%%' ESCAPE '\'

-- ค้นหาที่มี _ (Wildcard ตรงตัว)
WHERE Title LIKE '%\_%' ESCAPE '\'

-- ค้นหาที่มี Backslash
WHERE Title LIKE '%\\%'

Full-Text Search (สำหรับข้อความยาว)

ALTER TABLE DemoTable ADD FULLTEXT INDEX ft_title (Title);
SELECT * FROM DemoTable WHERE MATCH(Title) AGAINST('MySQL' IN BOOLEAN MODE);

Generated Column สำหรับค้นหาแบบไม่มีอักขระพิเศษ

ALTER TABLE DemoTable 
ADD COLUMN TitleClean VARCHAR(200) 
GENERATED ALWAYS AS (REPLACE(REPLACE(Title, '''', ''), '"', '')) STORED,
ADD INDEX idx_title_clean (TitleClean);

-- ค้นหาเร็ว
SELECT * FROM DemoTable WHERE TitleClean LIKE '%MySQLs%';