เมื่อต้องการดึงข้อความที่อยู่ระหว่างตัวคั่น (delimiter) ใน MySQL สามารถใช้ฟังก์ชัน LOCATE() ร่วมกับ SUBSTR() (หรือ SUBSTRING()) ได้ โดยตัวอย่างนี้ใช้เครื่องหมายทวิภาค : เป็นตัวคั่น
รูปแบบคำสั่ง
SELECT SUBSTR(
your_column,
LOCATE(':', your_column) + 1,
(CHAR_LENGTH(your_column) - LOCATE(':', REVERSE(your_column)) - LOCATE(':', your_column))
) AS alias_name
FROM your_table;
คำอธิบาย:
LOCATE(':', your_column)- หาตำแหน่งตัวคั่นแรกLOCATE(':', REVERSE(your_column))- หาตำแหน่งตัวคั่นสุดท้าย (โดยกลับสตริงก่อน)CHAR_LENGTH(...)- คำนวณความยาวสตริงทั้งหมด- สูตรคำนวณความยาว:
ความยาวทั้งหมด - ตำแหน่งตัวคั่นสุดท้าย - ตำแหน่งตัวคั่นแรก
ตัวอย่างการใช้งาน
สร้างตารางและเพิ่มข้อมูล:
CREATE TABLE SearchTextBetweenDelimitersDemo (
Id INT NOT NULL AUTO_INCREMENT,
Words LONGTEXT,
PRIMARY KEY (Id)
);
INSERT INTO SearchTextBetweenDelimitersDemo (Words) VALUES
('Object:Oriented:Programming'),
('C++:Java:C#'),
('SQLServer:MySQL:Oracle'),
('SQL SQLServer:MySQL:Oracle');
ข้อมูลในตาราง:
+----+-----------------------------+
| Id | Words |
+----+-----------------------------+
| 1 | Object:Oriented:Programming |
| 2 | C++:Java:C# |
| 3 | SQLServer:MySQL:Oracle |
| 4 | SQL SQLServer:MySQL:Oracle |
+----+-----------------------------+
คำสั่งดึงข้อความระหว่างตัวคั่นแรกและตัวคั่นสุดท้าย
SELECT SUBSTR(
Words,
LOCATE(':', Words) + 1,
(CHAR_LENGTH(Words) - LOCATE(':', REVERSE(Words)) - LOCATE(':', Words))
) AS Text
FROM SearchTextBetweenDelimitersDemo;
ผลลัพธ์:
+----------+
| Text |
+----------+
| Oriented |
| Java |
| MySQL |
| MySQL |
+----------+
หมายเหตุ: วิธีนี้ดึงข้อความ "ระหว่างตัวคั่นตัวแรกและตัวสุดท้าย" หากต้องการดึงส่วนที่ 2 เท่านั้น (เช่น Oriented, Java, MySQL) ให้ใช้ SUBSTRING_INDEX() แทนจะง่ายกว่า:
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(Words, ':', 2), ':', -1) AS Text
FROM SearchTextBetweenDelimitersDemo;