การเตรียมข้อมูล
mysql> CREATE TABLE DemoTable1857 (
Name VARCHAR(20)
);
mysql> INSERT INTO DemoTable1857 VALUES('John-Smith');
mysql> INSERT INTO DemoTable1857 VALUES('Brown-Chris');
mysql> INSERT INTO DemoTable1857 VALUES('David-Carol-Miller');
ใช้ SUBSTRING_INDEX ดึงส่วนก่อน Hyphen แรก
mysql> SELECT SUBSTRING_INDEX(Name, '-', 1) AS Name FROM DemoTable1857;
ผลลัพธ์:
+-------+
| Name |
+-------+
| John |
| Brown |
| David |
+-------+
ไวยากรณ์ SUBSTRING_INDEX
SUBSTRING_INDEX(str, delim, count)
str: สตริงต้นทางdelim: ตัวคั่น (Delimiter)count: จำนวนตัวคั่น- บวก: นับจากซ้ายไปขวา (ก่อนตัวคั่นที่ N)
- ลบ: นับจากขวาไปซ้าย (หลังตัวคั่นที่ N)
ตัวอย่างเพิ่มเติม
-- สตริง: 'a-b-c-d'
SUBSTRING_INDEX(str, '-', 1) -- 'a' (ก่อน - ตัวที่ 1)
SUBSTRING_INDEX(str, '-', 2) -- 'a-b' (ก่อน - ตัวที่ 2)
SUBSTRING_INDEX(str, '-', -1) -- 'd' (หลัง - ตัวสุดท้าย)
SUBSTRING_INDEX(str, '-', -2) -- 'c-d' (หลัง - ตัวที่ 2 จากท้าย)
กรณีการใช้งานจริง
- แยก First Name / Last Name จาก Full Name
- แยก Domain จาก Email:
SUBSTRING_INDEX(email, '@', -1) - แยกไฟล์นามสกุล:
SUBSTRING_INDEX(filename, '.', -1) - Parsing Log/Path:
SUBSTRING_INDEX(path, '/', -1)ได้ชื่อไฟล์