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

ใช้ LIKE CONCAT() ใน Query MySQL ได้หรือไม่?

คำตอบ: ใช้ได้

สามารถรวม LIKE กับ CONCAT() เพื่อสร้าง Pattern แบบ Dynamic ได้

ไวยากรณ์

WHERE column LIKE CONCAT('%', search_term, '%')

ตัวอย่างสมบูรณ์

1. สร้างตารางและข้อมูล

CREATE TABLE DemoTable (Name VARCHAR(50));

INSERT INTO DemoTable VALUES ('John');
INSERT INTO DemoTable VALUES ('Adam');
INSERT INTO DemoTable VALUES ('Bob');
INSERT INTO DemoTable VALUES ('Mike');

2. ค้นหาชื่อที่มีตัวอักษร 'o' อยู่ตรงไหนก็ได้

SELECT Name FROM DemoTable 
WHERE Name LIKE CONCAT('%', 'o', '%');

3. ผลลัพธ์

+------+
| Name |
+------+
| John |
| Bob  |
+------+

การประยุกต์ใช้จริง

1. รับค่าจาก Parameter/Variable

SET @search = 'ob';
SELECT Name FROM DemoTable 
WHERE Name LIKE CONCAT('%', @search, '%');
-- ผลลัพธ์: Bob

2. ค้นหาจากหลายคอลัมน์ (OR)

SELECT * FROM Users
WHERE FirstName LIKE CONCAT('%', @keyword, '%')
   OR LastName LIKE CONCAT('%', @keyword, '%')
   OR Email LIKE CONCAT('%', @keyword, '%');

3. ใช้ใน Stored Procedure

CREATE PROCEDURE SearchUsers(IN keyword VARCHAR(100))
BEGIN
    SELECT * FROM Users
    WHERE FirstName LIKE CONCAT('%', keyword, '%')
       OR LastName LIKE CONCAT('%', keyword, '%');
END;

4. Dynamic Pattern: เริ่มต้น/ลงท้าย/ตรงกลาง

-- เริ่มต้นด้วย keyword
WHERE Name LIKE CONCAT(keyword, '%')

-- ลงท้ายด้วย keyword
WHERE Name LIKE CONCAT('%', keyword)

-- มี keyword อยู่กลาง
WHERE Name LIKE CONCAT('%', keyword, '%')

ข้อควรระวังด้านประสิทธิภาพ

  • LIKE CONCAT('%', ..., '%') นำหน้าด้วย % → Full Table Scan ไม่ใช้ Index
  • สำหรับตารางใหญ่ ควรใช้ Full-Text Search หรือ Elasticsearch
  • LIKE CONCAT('prefix', '%') ขึ้นต้นคงที่ → ใช้ Index ได้

ฟังก์ชัน CONCAT() เพิ่มเติม

ฟังก์ชันคำอธิบาย
CONCAT(str1, str2, ...)รวมสตริง คืน NULL ถ้ามีค่า NULL ใดๆ
CONCAT_WS(sep, str1, str2, ...)รวมด้วย Separator ข้าม NULL ไป

สรุป

LIKE CONCAT('%', value, '%') ใช้ได้ และมีประโยชน์สำหรับ Dynamic Search Pattern แต่ควรระวังประสิทธิภาพกับตารางขนาดใหญ่