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

วิธีตรวจสอบว่าสตริงมีคำเฉพาะอยู่ใน MySQL ด้วย LIKE และ CONCAT

การค้นหาคำในสตริงด้วย LIKE และ CONCAT()

ใช้ LIKE ร่วมกับ CONCAT('%', column, '%') เพื่อตรวจสอบว่าคอลัมน์มีคำ/ข้อความที่ต้องการอยู่ภายในหรือไม่

รูปแบบคำสั่ง

WHERE 'search_word' LIKE CONCAT('%', column_name, '%')

หมายเหตุ: ตัวอย่างนี้ค้นหา "คอลัมน์มีคำที่ต้องการ" (Column contains word) ไม่ใช่ "คำที่ต้องการมีในคอลัมน์"

ตัวอย่าง: ค้นหาว่าคำว่า 'Relational' มีในคอลัมน์ Value หรือไม่

1. สร้างตารางและเพิ่มข้อมูล (แต่ละแถว = 1 คำ)

CREATE TABLE DemoTable (Value TEXT);
INSERT INTO DemoTable VALUES ('MySQL'), ('Is'), ('Relational'), ('Database');

2. ดูข้อมูล

SELECT * FROM DemoTable;

ผลลัพธ์:

+------------+
| Value      |
+------------+
| MySQL      |
| Is         |
| Relational |
| Database   |
+------------+

3. ค้นหาแถวที่มีคำ 'Relational'

SELECT Value FROM DemoTable WHERE 'Relational' LIKE CONCAT('%', Value, '%');

ผลลัพธ์:

+------------+
| Value      |
+------------+
| Relational |
+------------+

กรณีทั่วไป: ค้นหาข้อความในคอลัมน์ (Column contains text)

ส่วนใหญ่จะเป็นการค้นหา "คอลัมน์มีคำว่า X" ไม่ใช่ "คำ X มีในคอลัมน์":

-- คอลัมน์ Description มีคำ 'MySQL' อยู่ภายใน
SELECT * FROM Articles WHERE Description LIKE '%MySQL%';

-- ใช้ CONCAT สำหรับค่าที่เป็นตัวแปร/พารามิเตอร์
SET @search = 'MySQL';
SELECT * FROM Articles WHERE Description LIKE CONCAT('%', @search, '%');

ฟังก์ชันค้นหาข้อความอื่นๆ

ฟังก์ชัน/ออเปอเรเตอร์คำอธิบายCase Sensitive
LIKEPattern matching ด้วย % และ _ขึ้นกับ Collation (มักเป็น CI = Insensitive)
NOT LIKEตรงข้ามของ LIKEเหมือน LIKE
REGEXP / RLIKERegular Expressionขึ้นกับ Collation
LOCATE(substr, str)หาตำแหน่งของ substr ใน str (1-based)ขึ้นกับ Collation
INSTR(str, substr)เหมือน LOCATE แต่สลับอาร์กิวเมนต์ขึ้นกับ Collation
FIND_IN_SET(str, strlist)หา str ในรายการคั่นด้วย commaCase Insensitive

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

-- สร้าง Fulltext Index
ALTER TABLE Articles ADD FULLTEXT INDEX ft_description (Description);

-- ค้นหา
SELECT * FROM Articles 
WHERE MATCH(Description) AGAINST('MySQL' IN NATURAL LANGUAGE MODE);

ประสิทธิภาพ

  • LIKE '%text%' (ขึ้นต้น %) → Full Table Scan, ไม่ใช้ Index
  • LIKE 'text%' (ลงท้าย %) → ใช้ Index ได้
  • Full-Text Index เร็วกว่ามากสำหรับข้อความยาวและค้นหาหลายคำ