เพื่อตรวจสอบว่าคอลัมน์ใดคอลัมน์หนึ่งมีสตริงเฉพาะอยู่ภายใน ใช้ CONCAT() ร่วมกับ LIKE
สร้างตารางตัวอย่าง
mysql> create table DemoTable (
Name varchar(40) );
Query OK, 0 rows affected (0.56 sec)
เพิ่มข้อมูลตัวอย่าง
mysql> insert into DemoTable values('John'); Query OK, 1 row affected (0.33 sec)
mysql> insert into DemoTable values('Adam'); Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('Bob'); Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable values('Johnson'); Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('David'); Query OK, 1 row affected (0.12 sec)
แสดงข้อมูลทั้งหมด
mysql> select *from DemoTable;
+---------+ | Name | +---------+ | John | | Adam | | Bob | | Johnson | | David | +---------+ 5 rows in set (0.00 sec)
คิวรี่ค้นหาชื่อที่มี "Joh" อยู่ภายใน
mysql> select *from DemoTable where Name like "%Joh%" OR "Joh" LIKE CONCAT("%", Name, "%");
ผลลัพธ์:
+---------+ | Name | +---------+ | John | | Johnson | +---------+ 2 rows in set (0.00 sec)
คำอธิบายเงื่อนไข
Name LIKE '%Joh%'- ค้นหา "Joh" อยู่ใน Name (ปกติ)"Joh" LIKE CONCAT('%', Name, '%')- ค้นหา Name อยู่ใน "Joh" (กลับทิศทาง)- เงื่อนไขที่ 2 จะ match กรณี Name = 'Jo' หรือ 'h' (substring ของ Joh)
กรณีใช้งานจริง
มักใช้แค่เงื่อนไขแรกพอ:
SELECT * FROM DemoTable WHERE Name LIKE '%Joh%';
เพิ่มประสิทธิภาพด้วย Full-Text Search
สำหรับข้อความยาวหรือข้อมูลมาก ควรใช้:
ALTER TABLE DemoTable ADD FULLTEXT(Name);
SELECT * FROM DemoTable WHERE MATCH(Name) AGAINST('Joh');