เมื่อต้องการแยกส่วนเฉพาะของ URL เช่น ดึงชื่อไฟล์สุดท้าย โดเมน หรือ Path สามารถใช้ฟังก์ชัน SUBSTRING_INDEX() ซึ่งออกแบบมาสำหรับแยกสตริงด้วยตัวคั่น (Delimiter)
สร้างตารางและข้อมูล URL
mysql> create table DemoTable (
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
URL text
);
mysql> insert into DemoTable(URL) values('https:\\www.example.com\\homepage');
mysql> insert into DemoTable(URL) values('https:\\www.onlinetest.com\\welcome\\indexpage');
ดึงเฉพาะส่วนสุดท้าย (หลัง \ สุดท้าย)
mysql> select substring_index(URL, '\\', -1) from DemoTable;
ผลลัพธ์
+------------------------------+ | substring_index(URL,'\\',-1) | +------------------------------+ | homepage | | indexpage | +------------------------------+
รูปแบบ SUBSTRING_INDEX()
SUBSTRING_INDEX(สตริง, ตัวคั่น, จำนวน)
- จำนวน > 0 - นับจากซ้ายไปขวา (คืนส่วนก่อนตัวคั่นครั้งที่ N)
- จำนวน < 0 - นับจากขวาไปซ้าย (คืนส่วนหลังตัวคั่นครั้งที่ N จากท้าย)
- จำนวน = 0 - คืนค่าว่าง
ตัวอย่างการใช้งานเพิ่มเติม
| URL | คำสั่ง | ผลลัพธ์ | คำอธิบาย |
|---|---|---|---|
| https://example.com/path/file.html | SUBSTRING_INDEX(url, '/', -1) | file.html | ไฟล์สุดท้าย |
| https://example.com/path/file.html | SUBSTRING_INDEX(url, '/', 3) | https://example.com | โดเมน (protocol + domain) |
| https://example.com/path/file.html | SUBSTRING_INDEX(SUBSTRING_INDEX(url, '/', 3), '/', -1) | example.com | โดเมนอย่างเดียว |
| a,b,c,d,e | SUBSTRING_INDEX(str, ',', 2) | a,b | 2 ค่าแรก |
| a,b,c,d,e | SUBSTRING_INDEX(str, ',', -2) | d,e | 2 ค่าสุดท้าย |
หมายเหตุ
- MySQL จะเก็บ backslash (\\) เป็น escape character ต้องเขียน \\\\ ในคำสั่ง
- สำหรับ URL จริง ใช้ forward slash (/) เป็นตัวคั่นมาตรฐาน
- MySQL 8.0+ มีฟังก์ชัน
JSON_EXTRACT()สำหรับข้อมูล JSON ที่ยืดหยุ่นกว่า