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

SELECT ด้วย LIKE และสร้างคอลัมน์ใหม่เก็บสตริงที่ Match ใน MySQL

การเตรียมข้อมูล

mysql> CREATE TABLE DemoTable1872 (Name VARCHAR(20));

mysql> INSERT INTO DemoTable1872 VALUES('John Doe'), ('Adam Smith'), ('Mitchell Johnson');

ค้นหาและสร้างคอลัมน์ใหม่ด้วย SUBSTRING + LOCATE

mysql> SELECT Name,
    SUBSTRING(Name, LOCATE('John', Name), LENGTH('John')) AS NewName
    FROM DemoTable1872
    WHERE Name LIKE '%John%';

ผลลัพธ์:

+------------------+---------+
| Name             | NewName |
+------------------+---------+
| John Doe         | John    |
| Mitchell Johnson | John    |
+------------------+---------+

การทำงานของฟังก์ชัน

กรณี Case-Insensitive

MySQL Default Collation (utf8mb4_general_ci) เป็น Case-Insensitive แล้ว

-- บังคับ Case-Sensitive
WHERE Name LIKE BINARY '%John%'
-- หรือ
WHERE Name COLLATE utf8mb4_bin LIKE '%John%'

วิธีอื่น: REGEXP (MySQL 8.0+)

-- ดึงคำที่ Match ด้วย REGEXP_SUBSTR
SELECT Name, REGEXP_SUBSTR(Name, 'John') AS NewName
FROM DemoTable1872
WHERE Name REGEXP 'John';

กรณีใช้งานจริง

  • Highlight คำค้นหาใน Search Result
  • Extract ข้อมูลเฉพาะจาก Log/Message
  • Parsing Structured Text (Email, URL, Code)

ข้อจำกัด

  • หาเจอแค่ครั้งแรก (First Match)
  • ต้องรู้ Pattern ล่วงหน้า (Hardcoded 'John')
  • Dynamic Pattern ต้องใช้ Prepared Statement หรือ Dynamic SQL
ฟังก์ชันบทบาท
LOCATE('John', Name)หาตำแหน่งเริ่มต้นของ 'John' (1-based)
LENGTH('John')ความยาวของคำค้นหา (4)
SUBSTRING(Name, pos, len)ตัดสตริงจากตำแหน่ง pos ความยาว len